Я загружаю очень большие файлы CSV, в которых есть информация, которую я не использую. Что я сейчас делаю, так это перехожу к спискам, а затем фильтрую по условиям.
Например, в одном столбце у меня есть «A» и «B», но мне нужны только те строки, в которых есть «A», поэтому я отфильтровываю «B» и делаю это для всех других списков, которые я загружаю из Pandas. Я думаю, что то, что я делаю, очень неэффективно: загружать с помощью Pandas, а затем преобразовывать столбцы в списки для их фильтрации.
Есть ли более эффективный способ фильтрации данных. Я загружаю данные следующим образом в Pandas:
import pandas as pd
df = pd.read_csv('C:\\Users\\4209456\\Downloads\\TECNICO\\BBDD FD.csv', header=0, sep=';',parse_dates = ['Date'],dayfirst = True)
а затем я создаю списки некоторых столбцов:
FD=df["FD Text"]
Fecha=pd.to_datetime(df["Date"],dayfirst = True)
Следовательно, для обоих списков фильтров в соответствии с условием списка «FD» создается другой список «FD2», в рамках условия у меня есть список «Дата», создающий исправленный список «Дата2». Таким образом, у меня есть списки, необходимые для запуска моего кода, а именно «FD2» и «Date2», сохраняющие исходные позиции данных, оставшихся после фильтра.
Существует несколько способов фильтрации строк в Pandas, самый простой — создать маску (логический массив) с использованием условного выражения для рассматриваемого столбца, а затем отфильтровать с его помощью строки Dataframe. В основном это процедура, используемая в NumPy для фильтрации массивов. Это известно как логическое индексирование .
Мы можем создать небольшой пример, чтобы увидеть это:
Таким образом, у нас есть следующий Dataframe:
Используйте фильтр столбцов для получения другого Dataframe, который содержит только файлы,
sexo
соответствующие простым мужчинам:With
df['Sexo'] == 'F'
просто создает маску, которая в данном случае представляет собой серию Pandas и содержит один столбец логических значений:[False, True, False, True, False, False]
результат сравнения, если каждое значение столбца равно'F'
. Мы можем фильтровать любые другие итерируемые логические значения, например, массив NumPy, список, столбец из другого DataFrame и т. д.Другой пример, отфильтровывающий тех, кому 18 лет и старше:
Версия:
Вы можете фильтровать по датам, следуя той же идее, например, мы можем фильтровать строки
Fecha
между текущей датой и 30 днями назад:Также можно использовать несколько условий, например предыдущее условие, но также быть женщиной:
Его можно отфильтровать с помощью индекса таким же образом или с помощью
loc
, например, если наш столбецFecha
был в индексе DataFrame (DateTimeIndex), мы можем сделать: