将 pandas 对象转换为 timedelta 导致 NaT
Converting pandas object to timedelta results in NaT
我有一个包含三列的 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
我正在尝试使用此代码(基于对这个问题 Dates from 1900-01-01 are added to my 'Time' after using df['Time'] = pd.to_datetime(phData['Time'], format='%H:%M:%S') 的回答)将 hour_in
和 hour_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()
returns这个:
<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
.
的小时
考虑以下方法:
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]
我有一个包含三列的 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
我正在尝试使用此代码(基于对这个问题 Dates from 1900-01-01 are added to my 'Time' after using df['Time'] = pd.to_datetime(phData['Time'], format='%H:%M:%S') 的回答)将 hour_in
和 hour_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()
returns这个:
<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
.
考虑以下方法:
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]