Pandas Timedelta ошибка с полями datetime64 [ns, UTC] - PullRequest
0 голосов
/ 24 мая 2018

У меня есть датафрейм с двумя полями времени, показанными ниже.Когда я пытаюсь взять Timedelta между ними, я получаю сообщение об ошибке ниже.Я включил .info () для полей.Кто-нибудь видит, в чем проблема, и можете ли вы подсказать, как ее исправить?Любые советы с благодарностью.

Data:

                            et_utc                    ts_utc
0 2018-05-02 09:24:29.304000+00:00 2018-05-02 09:39:15+00:00
1 2018-05-02 09:26:12.132000+00:00 2018-05-02 09:39:15+00:00
2 2018-05-02 09:28:37.913000+00:00 2018-05-02 09:39:12+00:00
3 2018-05-02 09:28:37.913000+00:00 2018-05-02 09:28:49+00:00
4 2018-05-02 10:39:48.820000+00:00 2018-05-02 10:39:48+00:00


Data description:

df[[‘et_utc','ts_utc']].info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 25625 entries, 0 to 25624
Data columns (total 2 columns):
et_utc    25625 non-null datetime64[ns, UTC]
ts_utc    25625 non-null datetime64[ns, UTC]
dtypes: datetime64[ns, UTC](2)
memory usage: 1.8 MB


Code:

df['t_delta']=pd.Timedelta(df['et_utc'] - df['ts_utc']).seconds


Error:

ValueError: Value must be Timedelta, string, integer, float, timedelta or convertible

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Используйте метод доступа Series dt , чтобы получить доступ к методам и атрибутам ряда datetime (timedelta).

>>> (df['et_utc'] - df['ts_utc']).dt.total_seconds()
0   -885.696
1   -782.868
2   -634.087
3    -11.087
4      0.820
dtype: float64
>>> df['t_delta'] = (df['et_utc'] - df['ts_utc']).dt.total_seconds()
>>>
>>> print(df)
                   et_utc              ts_utc  t_delta
0 2018-05-02 09:24:29.304 2018-05-02 09:39:15 -885.696
1 2018-05-02 09:26:12.132 2018-05-02 09:39:15 -782.868
2 2018-05-02 09:28:37.913 2018-05-02 09:39:12 -634.087
3 2018-05-02 09:28:37.913 2018-05-02 09:28:49  -11.087
4 2018-05-02 10:39:48.820 2018-05-02 10:39:48    0.820
>>> 

Свойства типа timetime


astyping эквивалентен делению по полу, теряет немного разрешения.

>>> (df['et_utc'] - df['ts_utc']).astype('timedelta64[s]')
0   -886.0
1   -783.0
2   -635.0
3    -12.0
4      0.0
dtype: float64
>>> 
0 голосов
/ 24 мая 2018

Если вы хотите получить timedelta в секундах, в соответствии с официальной документацией , вы можете сделать:

df['t_delta']=(df['et_utc'] - df['ts_utc']).astype('timedelta64[s]')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...