将pandas对象转换为timedelta会导致NaT

时间:2017-08-22 18:28:03

标签: python pandas timedelta

我有一个包含三列的DataFrame,一个日期和两次。就像这样:

         date hour_in hour_out
0  01/06/2016        08:15      19:37   
1  02/06/2016        08:26      17:31   
2  03/06/2016        08:08      21:31

我正在尝试使用此代码(基于此问题的答案PathGetInvalidFileNameChars)将hour_inhour_out转换为timedelta:

df['hora_entrada'] = pd.to_timedelta(df['hora_entrada'], errors='coerce')
df['hora_saida']  = pd.to_timedelta(df['hora_saida'] , errors='coerce')

演员表后,我的列会转换为正确的dtype timedelta64[ns],但所有值都设置为NaT。我的df.info()会返回此信息:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 439 entries, 0 to 438
Data columns (total 4 columns):
data            439 non-null datetime64[ns]
hour_in         0 non-null timedelta64[ns]
hour_out        0 non-null timedelta64[ns]
dtypes: datetime64[ns](1), timedelta64[ns](2)

数据输出如下:

          data hora_entrada hora_saida
0   2016-06-01          NaT        NaT
1   2016-06-02          NaT        NaT
2   2016-06-03          NaT        NaT

我尝试将时间列转换为datetime然后转换为timedelta,但我得到了奇怪的结果。这是一个例子:

          data          hora_entrada            hora_saida
0   2016-06-01 -25567 days +08:15:00 -25567 days +19:37:00
1   2016-06-02 -25567 days +08:26:00 -25567 days +17:31:00
2   2016-06-03 -25567 days +08:08:00 -25567 days +21:31:00

我认为这是因为当我将其转换为datetime时,它会在小时附加日期1900-01-01

1 个答案:

答案 0 :(得分:0)

考虑以下方法:

In [24]: pd.to_timedelta(df.hour_in + ':00', errors='coerce')
Out[24]:
0   08:15:00
1   08:26:00
2   08:08:00
Name: hour_in, dtype: timedelta64[ns]