Формат дат различается в разных регионах (ДД/ММ/ГГ, ГГГГ-ММ-ДД, ГГГГ-ДД-ММ и т. д.). Работа со значениями строки даты в наборе данных является сложной задачей. Время и дату в строковом формате можно преобразовать в datetime64 с помощью метода Pandas to_datetime(). Этот тип данных позволяет нам извлекать характеристики времени и даты в диапазоне от «микросекунд» до «года». Сначала преобразуйте значения даты в данном DataFrame в тип datetime64, прежде чем фильтровать строки на основе дат. Затем определите условие фильтра, используя функции DataFrame.loc и DataFrame.query пакета Pandas. Получите отфильтрованный DataFrame, который является подмножеством данных.
- Как извлечь значения из фрейма данных Pandas на основе значений даты
- Пример 1. Извлечение данных с помощью функции DataFrame.loc[] на основе значений даты
- Пример 2. Извлечение данных с использованием DateTimeIndex(dt) в функции DataFrame.loc[]
- Пример 3. Извлечение данных с помощью функции.Query[] на основе значений даты
- Пример 4. Фильтрация строк между двумя датами с помощью функции Isin()
- Заключение
Как извлечь значения из фрейма данных Pandas на основе значений даты
В следующих примерах мы будем использовать различные методы для фильтрации столбцов DataFrame по значениям даты. Перед фильтрацией данных даты должны быть преобразованы в тип данных «datetime64».
Пример 1. Извлечение данных с помощью функции DataFrame.loc[] на основе значений даты
Используя имена столбцов или логический массив, функцию loc[] можно использовать для извлечения группы столбцов и строк в DataFrame. Массив (логическое значение) со значением True, если строка соответствует требованию, и значением False во всех остальных случаях возвращается условным выражением в методе loc[]. Функция loc[] возвращает только строки со значениями True. Чтобы создать наш DataFrame, мы используем функцию pd.DataFrame(). Сначала необходимо импортировать библиотеку Pandas.
Мы передали словарь Python внутри функции pd.DataFrame(), чтобы создать наш DataFrame «df». Давайте распечатаем его, чтобы визуализировать его содержимое.
В предыдущем DataFrame есть два столбца «name» и «posting_date». Колонка «имя» состоит из имен сотрудников какой-либо компании («Лео», «Брюс», «Роберт», «Клэй», «Мартин», «Генри», «Лана», «Бекки», «Алекса»)., «Дастин»). Столбец «posting_date» содержит запись даты размещения каждого сотрудника («2022-08-01», «2022-08-20», «2022-09-05», «2022-09-25», «2022 −09-30», «2022-10-10», «2022-11-10», «2022-12-01», «2022-12-10», «2022-12-30»). Давайте проверим типы данных столбцов в DataFrame «df», используя атрибут dtypes.
Можно заметить, что текущим типом данных столбцов «posting_date» является «object». Чтобы отфильтровать данные на основе значений даты, мы преобразуем их в «datetime64».
Чтобы преобразовать тип данных в datetime64, мы использовали функцию pd.datetime() и передали столбец «posting_date» в качестве аргумента внутри функции. Формат указан. Теперь тип данных столбца со значениями даты изменен на «timedate64». Опять же, вы можете использовать атрибут dtypes для определения типа данных столбцов.
Тип данных posting_date изменен с объекта на datetime64. Поскольку теперь тип данных изменен, мы можем использовать нашу функцию loc[] с условиями внутри нее для фильтрации строк.
Мы применили два условия внутри функции loc[] для извлечения строк из DataFrame, где дата в «posting_date» равна или больше «22-09-05», а значение «posting_date» меньше 22- 12-01.
Предыдущие строки DataFrame соответствуют условиям внутри функции loc[].
Пример 2. Извлечение данных с использованием DateTimeIndex(dt) в функции DataFrame.loc[]
Несколько свойств могут быть возвращены с помощью dt для получения значений серии в виде значений, подобных дате и времени. Например, атрибут «Series.dt.date» возвращает массив даты и времени Python NumPy. Давайте создадим еще один DataFrame для этого примера.
DataFrame создается с использованием словарной части функции pd.DataFrame().
Столбец «дата» в нашем DataFrame состоит из значений даты в виде строк («2021-06-09», «2021-06-25», «2021-07-05», «2021-07-12», «2021 −08-29», «2021-09-15», «2021-10-21», «2021-11-02», «2021-11-10», «2021-11-18»). Теперь мы проверяем тип данных DataFrame с помощью атрибута dtypes.
Тип данных столбцов «задача» и «дата» — int64 и объект соответственно. Мы меняем столбец «дата» на тип данных «datetime64». Чтобы изменить его тип данных, мы используем функцию to_datetime().
Теперь мы можем фильтровать данные с помощью метода loc[]. Во-первых, мы фильтруем данные без использования атрибута dt для фильтрации данных по определенным датам.
Предыдущий скрипт извлекает строки с датами между ноябрем, поскольку указано условие, что дата должна быть равна или больше 01.11.2021 и меньше 30.11.2021.
Мы также можем получить строки с определенными датами или временем, используя атрибут dt. Предположим, что мы получаем строку для определенного дня недели. Индексация дней недели начинается с 1 до 7, где 1 — понедельник, а 7 — воскресенье. Если мы указываем понедельник, мы используем значение индекса 1.
Пример 3. Извлечение данных с помощью функции.Query[] на основе значений даты
Метод query() также можно использовать для фильтрации данных на основе значений даты из DataFrame. Вы можете запросить DataFrame, используя метод query(). Выражение запроса передается в качестве входной строки методу query() и должно возвращать значение True или False. DataFrame возвращается, когда вывод равен True оператором запроса. Давайте создадим DataFrame, в котором мы используем функцию query() для фильтрации данных.
Теперь давайте изменим тип данных столбца «прибытие» на datetime64, используя функцию to_datetime().
Используя атрибут dtypes, давайте проверим, изменился ли тип данных столбца «прибытие» на datetime64 или нет.
При изменении типа данных мы используем функцию query() для фильтрации данных из DataFrame «df».
Вы можете заметить, что условие внутри функции query() передается в виде строки, то есть «прибытие >= ’2022-02-05′ и прибытие < ’2022-05-15’». Функция возвращает строки, в которых значения дат в столбце «прибытие» равны или больше 05.02.2022 и меньше 15.05.2022.
Предыдущие строки из DataFrame «df» удовлетворяют условию внутри функции query().
Пример 4. Фильтрация строк между двумя датами с помощью функции Isin()
Метод isin() помогает получить строки с одним (или несколькими) значениями в определенном столбце. Метод «pandas.DataFrame.isin()» возвращает Dataframe логических значений, которые указывают, включен ли элемент в заданный диапазон. Этот метод позволяет нам фильтровать строки DataFrame в Pandas по дате. Теперь мы создаем новый образец DataFrame, чтобы продемонстрировать использование функции isin() для фильтрации строк после импорта модулей Pandas и NumPy.
Когда мы создали наш DataFrame, мы теперь меняем тип данных столбца «дата» на datetime64, как мы делали в предыдущих примерах.
После изменения типа данных на datetime 64 мы фильтруем строки, используя строки из «df» DataFrame, используя функцию isin().
Мы передали функцию pd.date_range() вместе с функцией isin(). Мы указали начальный параметр date_range() как 2021-12-01 и конечный параметр как 2022-02-01. Предыдущий код возвращает строки из DataFrame, которые находятся в пределах диапазона.
Заключение
В этом уроке мы попытались научить вас фильтровать строки по значениям даты. Мы узнали, что мы преобразуем значения даты в данном DataFrame в тип datetime64 перед фильтрацией строк на основе дат. В этой статье мы реализовали несколько примеров, чтобы научить вас использовать функцию DataFrame.loc[], функцию.query[] и функцию isin() для фильтрации данных по датам в Pandas. Теперь, пройдя этот урок, вы сможете самостоятельно фильтровать строки.
Не работает такой код. Ошибка freq not specified and cannot be inferred.