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

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