Я использую панд .astype()
, чтобы наложить диктант имен столбцов на их правильные dtypes.Он работает для str
, int
, datetime64[ns]
и float
, но не работает на timedelta64[ns]
.Когда я запускаю это, я получаю ValueError: Не удалось преобразовать объект в NumPy timedelta .
import pandas as pd
import numpy as np
sample_row = pd.DataFrame([['g1',
3912841,
'2018-09-29 16:03:49',
4.040196e+09,
'1 days 15:49:38']],
columns=['group',
'job_number',
'submission_time',
'maxvmem',
'wait_time'])
sample_row = (sample_row.astype(dtype={'group':'str',
'job_number':'int',
'submission_time':'datetime64[ns]',
'maxvmem':'float',
'wait_time':'timedelta64[ns]'}))
Я нашел этот ответ на аналогичный вопрос , но, похоже, предлагаетЯ использую правильный формат dtype.
Обновление: вот тот же код с предлагаемым изменением от @hpaulj:
import pandas as pd
import numpy as np
sample_row = pd.DataFrame([['g1',
3912841,
'2018-09-29 16:03:49',
4.040196e+09,
pd.Timedelta('1 days 15:49:38')]],
columns=['group',
'job_number',
'submission_time',
'maxvmem',
'wait_time'])
sample_row = (sample_row.astype(dtype={'group':'str',
'job_number':'int',
'submission_time':'datetime64[ns]',
'maxvmem':'float',
'wait_time':'timedelta64[ns]'}))
Чтобы убедиться, что dtypes установлены правильно:
for i in sample_row.loc[0, sample_row.columns]:
print(type(i))
Выход:
<class 'str'>
<class 'numpy.int32'>
<class 'pandas._libs.tslib.Timestamp'>
<class 'numpy.float64'>
<class 'pandas._libs.tslib.Timedelta'>