AttributeError: у объекта 'Timedelta' нет атрибута 'dt' - PullRequest
0 голосов
/ 27 марта 2020

У меня есть df:

    id  timestamp                       data  group Date
27001   27242   2020-01-01 09:07:21.277 19.5    1   2020-01-01
27002   27243   2020-01-01 09:07:21.377 19.0    1   2020-01-01
27581   27822   2020-01-02 07:53:05.173 19.5    1   2020-01-02
27582   27823   2020-01-02 07:53:05.273 20.0    1   2020-01-02
27647   27888   2020-01-02 10:01:46.380 20.5    1   2020-01-02
...

, и я хотел бы рассчитать разницу во времени между строкой 1 и строкой 2 в секундах. Я мог бы сделать это с

df['timediff'] = (df['timestamp'].shift(-1) - df['timestamp']).dt.total_seconds()

Однако, когда я увеличиваю, чтобы посмотреть только на 2 строки, ie. row1 и row0 с кодом:

difference = (df.loc[0, 'timestamp'] - df.loc[1, 'timestamp']).dt.total_seconds()

возвращено сообщение об ошибке

AttributeError: у объекта 'Timedelta' нет атрибута 'dt'

Почему это происходит?

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Для проверки ниже приводится Series :

type(df['timestamp'].shift(-1) - df['timestamp'])

Series имеет объект доступа ( dt ) для свойств, подобных дате и времени. Однако ниже приводится TimeDelta без средства доступа dt:

type(df.loc[0, 'timestamp'] - df.loc[1, 'timestamp'])

Просто вызовите следующее (без средства доступа dt ), чтобы устранить ошибку:

difference = (df.loc[0, 'timestamp'] - df.loc[1, 'timestamp']).total_seconds()
0 голосов
/ 27 марта 2020

Как сказал @hpaulj в комментариях, dt связан только с dataframe подобным объектом.

Таким образом, чтобы получить total seconds, вы должны использовать difference = (df.loc[0, 'timestamp'] - df.loc[1, 'timestamp']).total_seconds()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...