Сортировка фрейма данных по периоду времени; datetime64[ns]

#python #pandas #numpy #date #time

#питон #панды #тупица #Дата #время

Вопрос:

У меня есть еще одна проблема с подведением итогов по столбцу (Python — Панды)

У меня есть фрейм данных «новый» с датами с периодами в 5 дней. Столбец «Даты» имеет тип datetime64[ns]. Я пытаюсь отфильтровать фрейм данных по дате, например «все значения между 2021-10-10 и 2021-10-15» или «все значения после 2021-10-14» и т. Д. Что бы я ни пытался, я получаю сообщения об ошибках. Начиная с:

 mask = (new['Date'] gt; '2021-10-10') amp; (df['Date'] lt;= '2021-10-15')  

Я получаю:

 TypeError: 'lt;=' not supported between instances of 'date time.date' and 'str'  

После этой ошибки я пытаюсь преобразовать срезы, следуя совету «Дело в том, что вы хотите нарезать, используя строки «2017-07-07», в то время как ваш индекс имеет тип дата, время.дата. Ваши срезы тоже должны быть такого типа. Вы можете сделать это, определив дату начала и дату окончания следующим образом:

 import pandas as pd startdate = pd. to_datetime("2017-7-7").date() enddate = pd. to_datetime("2017-7-10").date() df.loc[startdate:enddate]  

(Я, конечно, удаляю пробелы) Но теперь я понимаю

 TypeError: 'lt;' not supported between instances of 'int' and 'date time.date'  

Я просто хочу отсортировать и отфильтровать свой фрейм данных по разным периодам времени. Спасибо за любую помощь

Комментарии:

1. как это связано с «Суммированием десятичных чисел»?

2. Прости, это была ошибка! Я все изменю.

Ответ №1:

Просто чтобы убедиться, что все находится в одном и том же формате, используйте pd.to_datetime() и используйте infer_datetime_format=True помогает с форматированием и ускоряет работу функции:

 df['Date'] = pd.to_datetime(df['Date'],infer_datetime_format=True)  df = df[(df['Date'] gt; pd.to_datetime('2021-10-10')) amp; (df['Date'] lt;= pd.to_datetime('2021-10-15'))]  

Комментарии:

1. Спасибо, Селиус, теперь это работает

2. Как я могу теперь установить startdate = pd. to_datetime("2017-7-7").date() и enddate = pd. to_datetime("2017-7-10").date() ? Это приводит к ошибке: AttributeError: объект ‘str’ не имеет атрибута ‘дата’

3. Используйте .dt.date вместо .date()