Как заставить timedelta64 [ns] работать с пандами astype () для приведения нескольких столбцов к разным dtypes - PullRequest
0 голосов
/ 06 февраля 2019

Я использую панд .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'>
...