У меня есть Pandas DataFrame со столбцом «дата». Теперь мне нужно отфильтровать все строки в DataFrame с датами за пределами следующих двух месяцев. По сути, мне нужно только сохранить строки, которые находятся в течение следующих двух месяцев.
Каков наилучший способ достичь этого?
query
здесь.df.query('20130101 < date < 20130201')
,.loc
и.ix
) и столбцов в ваших примерах не эквивалентны.df.ix['2014-01-01':'2014-02-01']
включает в себя,2014-02-01
покаdf[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]
не включает2013-02-01
, он будет соответствовать только строки до2013-01-31
.Предыдущий ответ, по моему опыту, неверен, вы не можете передать его простой строкой, он должен быть объектом datetime. Так:
источник
И если ваши даты стандартизированы путем импорта пакета datetime, вы можете просто использовать:
Для стандартизации вашей строки даты с использованием пакета datetime вы можете использовать эту функцию:
источник
df[(df['date']>pd.Timestamp(2016,1,1)) & (df['date']<pd.Timestamp(2016,3,1))]
.Если ваш столбец datetime имеет тип datetime Pandas (например
datetime64[ns]
), для правильной фильтрации вам необходим объект pd.Timestamp , например:источник
Если даты в индексе, то просто:
источник
Вы можете использовать pd.Timestamp для выполнения запроса и локальной ссылки
с выходом
Взгляните на документацию pandas для DataFrame.query , в частности упоминание о префиксе udsing , на который ссылается локальная переменная
@
. В этом случае мы ссылаемся,pd.Timestamp
используя локальный псевдоним,ts
чтобы иметь возможность предоставить строку метки времениисточник
Поэтому при загрузке файла данных csv нам нужно установить столбец даты в качестве индекса сейчас, как показано ниже, чтобы отфильтровать данные по диапазону дат. Это не было необходимо для устаревшего метода: pd.DataFrame.from_csv ().
Если вы просто хотите показать данные за два месяца с января по февраль, например, с 2020-01-01 по 2020-02-29, вы можете сделать это:
Это было проверено, работая на Python 3.7. Надеюсь, вы найдете это полезным.
источник
index_col
должен бытьstring
не список.mydata = pd.read_csv('mydata.csv',index_col='date')
Как насчет использования
pyjanitor
У него есть интересные функции.
После
pip install pyjanitor
источник
Кратчайший способ фильтрации вашего фрейма данных по дате. Предположим, что ваш столбец даты имеет тип datetime64 [ns]
источник
Мне пока не разрешено писать комментарии, поэтому я напишу ответ, если кто-нибудь прочтет все из них и достигнет этого.
Если индекс набора данных представляет собой дату и время, и вы хотите отфильтровать это только по (например) месяцам, вы можете сделать следующее:
Это отфильтрует набор данных для вас к марту.
источник
Если вы уже преобразовали строку в формат даты, используя pd.to_datetime, вы можете просто использовать:
df = df[(df['Date']> "2018-01-01") & (df['Date']< "2019-07-01")]
источник
Вы можете просто выбрать временной диапазон, выполнив: df.loc ['start_date': 'end_date']
источник