При переводе столбцов в datetime выдает ошибку: ValueError: cannot assemble the datetimes: unconverted data remains: 1

Есть фрейм данных, который содержит год, месяц, дату, минуты, часы и секунды:

    year    month   day minute  hour    second
0   2008    1       1   3.0     0.0     30.0
1   2008    1       1   4.0     0.0     0.0
2   2008    1       1   4.0     0.0     30.0
3   2008    1       1   5.0     0.0     0.0
4   2008    1       1   5.0     0.0     30.0
... ... ... ... ... ... ...
931296  2008    31  12  1423.0  23.0    0.0
931297  2008    31  12  1423.0  23.0    30.0
931298  2008    31  12  1424.0  23.0    0.0
931299  2008    31  12  1424.0  23.0    30.0
931300  2008    31  12  1425.0  23.0    0.0
931301 rows × 6 columns

Необходимо перевести все это в формат datetime. Прописал pd.timedate(df), но выводится следующая ошибка:

ValueError: cannot assemble the datetimes: unconverted data remains: 1


Ответы (2 шт):

Автор решения: MaxU

Можно воспользоваться pd.to_datetime(), если у вас не будет фееричных данных в которых могут встречаться 31-й месяц и 1425-я минута:

Assembling a datetime from multiple columns of a DataFrame. The keys can be common abbreviations like [‘year’, ‘month’, ‘day’, ‘minute’, ‘second’, ‘ms’, ‘us’, ‘ns’]) or plurals of the same

In [51]: df
Out[51]:
   year  day  month  minute  hour  second
0  2008    1      1     3.0   0.0    30.0
1  2008    1      1     4.0   0.0     0.0
2  2008   31     12    14.0  23.0     0.0
3  2008   31     12    15.0  23.0    30.0

In [52]: df["Date"] = pd.to_datetime(df)

In [53]: df
Out[53]:
   year  day  month  minute  hour  second                Date
0  2008    1      1     3.0   0.0    30.0 2008-01-01 00:03:30
1  2008    1      1     4.0   0.0     0.0 2008-01-01 00:04:00
2  2008   31     12    14.0  23.0     0.0 2008-12-31 23:14:00
3  2008   31     12    15.0  23.0    30.0 2008-12-31 23:15:30
→ Ссылка
Автор решения: aufloren

Я уже писал, что вопрос был решен, ы решении мне помогали. Делюсь решением.

def f(day,year):
    if year==2008 or year==2012 or year==2016 or year==2020:
        m=[31,29,31,30,31,30,31,31,30,31,30,31]
    else:
        m = [31,28,31,30,31,30,31,31,30,31,30,31]
    month = 0
    for i in m:
        day -= i
        month += 1
        if day <= 0:
            return day+i,month
        
def hour(sec):
    s=sec%60
    m=(sec//60)%60
    h=sec//3600
    return h,m,s

Вот таким образом были переведены сутки в дни месяцев, а секунды в часы:минуты:секунды

→ Ссылка