В фрейме данных добавьте столбец смещения времени к другому столбцу даты и времени - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть кадр данных со следующей информацией:

         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

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Образец 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

Вы можете сначала преобразовать 'Offset Dep' в timedelta, используя 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
0 голосов
/ 24 апреля 2020

Обратите внимание на эту ссылку: https://github.com/numpy/numpy/issues/4440 Я думаю, следует сначала определить объект для Timedelta с помощью timedelta64, а затем использовать его.

...