我有一个包含以下信息的数据帧:
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
样品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
请注意此链接:https://github.com/numpy/numpy/issues/4440我认为应该首先用timedelta64为Timedelta定义一个对象,然后使用它