在数据帧中,将时间偏移量列添加到另一个日期时间列



我有一个包含以下信息的数据帧:

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定义一个对象,然后使用它

相关内容

  • 没有找到相关文章

最新更新