簡體   English   中英

在 dataframe 中將時間偏移列添加到另一個日期時間列

[英]In dataframe add time offset column to another datetime column

我有一個 dataframe 具有以下信息:

         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

注意這個鏈接: https://github.com/numpy/numpy/issues/4440 我認為應該首先用 timedelta64 為 Timedelta 定義一個 object 然后使用它。

樣本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'轉換為pd.to_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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM