在数据框中将时间偏移列添加到另一个日期时间列
In dataframe add time offset column to another datetime column
我有一个包含以下信息的数据框:
Departure Time Offset Dep Arrival Time Offset Arr
0 05:10 +01:00 08:25 +01:00
1 08:05 +01:00 10:10 +01:00
2 11:50 +01:00 12:05 +01:00
3 11:55 +01:00 14:15 +00:00
4 14:55 +02:00 18:40 +01:00
df.dtypes
Departure Time object
Offset Departure object
Arrival Time object
Offset Arrival object
dtype: object
我想为出发时间创建另一列,其中包括出发偏移量作为日期时间格式的偏移量。
我试过了但是没有成功
df['Departure_Time'] = df['Departure Time'] + df['Offset Departure'].astype('timedelta64')
ValueError: Could not convert object to NumPy timedelta
注意这个link:
https://github.com/numpy/numpy/issues/4440
我觉得应该先用timedelta64为Timedelta定义一个对象,然后再使用。
样本df
:
Departure Time Offset Dep Arrival Time Offset Arr
0 05:10 +01:00 08:25 +01:00
1 08:05 +01:00 10:10 +01:00
2 11:50 +01:00 12:05 +01:00
3 11:55 +01:00 14:15 +00:00
4 14:55 +02:00 18:40 +01:00
5 13:15 -03:00 20:20 -02:00
您可以先使用 pd.to_timedelta
将 'Offset Dep'
转换为 timedelta,但您需要添加字符串的 :ss
部分。:
pd.to_timedelta(df['Offset Dep'].astype(str) + ':00')
然后,您可以将 'Departure Time'
转换为日期时间并添加时间增量:
>>> df['Departure Time'].astype('datetime64') + pd.to_timedelta(df['Offset Dep'].astype(str) + ':00')
0 2020-04-24 06:10:00
1 2020-04-24 09:05:00
2 2020-04-24 12:50:00
3 2020-04-24 12:55:00
4 2020-04-24 16:55:00
5 2020-04-24 10:15:00
dtype: datetime64[ns]
如果您有任何要排除的 nan
值,例如:
Departure Time Offset Dep Arrival Time Offset Arr
0 05:10 +01:00 08:25 +01:00
1 08:05 +01:00 10:10 +01:00
2 11:50 +01:00 12:05 +01:00
3 11:55 +01:00 14:15 +00:00
4 14:55 +02:00 18:40 +01:00
5 NaN NaN NaN NaN
6 13:15 -03:00 20:20 -02:00
您可能想要使用掩码排除 NaN
行:
mask = df['Offset Dep'].notna()
df.loc[mask, 'Departure Time'] = (df.loc[mask, 'Departure Time'].astype('datetime64') \
+ pd.to_timedelta(df.loc[mask, 'Offset Dep'].astype(str) + ':00')).dt.strftime('%H:%M')
结果:
Departure Time Offset Dep Arrival Time Offset Arr
0 06:10 +01:00 08:25 +01:00
1 09:05 +01:00 10:10 +01:00
2 12:50 +01:00 12:05 +01:00
3 12:55 +01:00 14:15 +00:00
4 16:55 +02:00 18:40 +01:00
5 NaN NaN NaN NaN
6 10:15 -03:00 20:20 -02:00
我有一个包含以下信息的数据框:
Departure Time Offset Dep Arrival Time Offset Arr
0 05:10 +01:00 08:25 +01:00
1 08:05 +01:00 10:10 +01:00
2 11:50 +01:00 12:05 +01:00
3 11:55 +01:00 14:15 +00:00
4 14:55 +02:00 18:40 +01:00
df.dtypes
Departure Time object
Offset Departure object
Arrival Time object
Offset Arrival object
dtype: object
我想为出发时间创建另一列,其中包括出发偏移量作为日期时间格式的偏移量。
我试过了但是没有成功
df['Departure_Time'] = df['Departure Time'] + df['Offset Departure'].astype('timedelta64')
ValueError: Could not convert object to NumPy timedelta
注意这个link: https://github.com/numpy/numpy/issues/4440 我觉得应该先用timedelta64为Timedelta定义一个对象,然后再使用。
样本df
:
Departure Time Offset Dep Arrival Time Offset Arr
0 05:10 +01:00 08:25 +01:00
1 08:05 +01:00 10:10 +01:00
2 11:50 +01:00 12:05 +01:00
3 11:55 +01:00 14:15 +00:00
4 14:55 +02:00 18:40 +01:00
5 13:15 -03:00 20:20 -02:00
您可以先使用 pd.to_timedelta
将 'Offset Dep'
转换为 timedelta,但您需要添加字符串的 :ss
部分。:
pd.to_timedelta(df['Offset Dep'].astype(str) + ':00')
然后,您可以将 'Departure Time'
转换为日期时间并添加时间增量:
>>> df['Departure Time'].astype('datetime64') + pd.to_timedelta(df['Offset Dep'].astype(str) + ':00')
0 2020-04-24 06:10:00
1 2020-04-24 09:05:00
2 2020-04-24 12:50:00
3 2020-04-24 12:55:00
4 2020-04-24 16:55:00
5 2020-04-24 10:15:00
dtype: datetime64[ns]
如果您有任何要排除的 nan
值,例如:
Departure Time Offset Dep Arrival Time Offset Arr
0 05:10 +01:00 08:25 +01:00
1 08:05 +01:00 10:10 +01:00
2 11:50 +01:00 12:05 +01:00
3 11:55 +01:00 14:15 +00:00
4 14:55 +02:00 18:40 +01:00
5 NaN NaN NaN NaN
6 13:15 -03:00 20:20 -02:00
您可能想要使用掩码排除 NaN
行:
mask = df['Offset Dep'].notna()
df.loc[mask, 'Departure Time'] = (df.loc[mask, 'Departure Time'].astype('datetime64') \
+ pd.to_timedelta(df.loc[mask, 'Offset Dep'].astype(str) + ':00')).dt.strftime('%H:%M')
结果:
Departure Time Offset Dep Arrival Time Offset Arr
0 06:10 +01:00 08:25 +01:00
1 09:05 +01:00 10:10 +01:00
2 12:50 +01:00 12:05 +01:00
3 12:55 +01:00 14:15 +00:00
4 16:55 +02:00 18:40 +01:00
5 NaN NaN NaN NaN
6 10:15 -03:00 20:20 -02:00