При переводе столбцов в 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 шт):
Можно воспользоваться 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
Я уже писал, что вопрос был решен, ы решении мне помогали. Делюсь решением.
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
Вот таким образом были переведены сутки в дни месяцев, а секунды в часы:минуты:секунды