我正在上传非常大的 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”,在该条件下,我有列表“Date”创建一个更正的列表“Date2”。这样我就有了开始我的代码所需的列表,它们是“FD2”和“Date2”,保留了过滤器留下的数据的原始位置。
在 Pandas 中有几种过滤行的方法,最简单的方法是使用相关列的条件创建一个掩码(布尔数组),然后用它过滤 Dataframe 的行。它基本上是 NumPy 中过滤数组的过程。这称为布尔索引。
我们可以创建一个小例子来看看:
因此,我们有以下数据框:
我们可以使用该列进行过滤,
sexo
以获取另一个仅包含与女性对应的行的数据框,只需执行以下操作:只需
df['Sexo'] == 'F'
创建一个掩码,在这种情况下是一系列 Pandas 并且包含单列布尔值:[False, True, False, True, False, False]
比较列的每个值是否等于的结果'F'
。我们可以使用任何其他可迭代的布尔值进行过滤,例如 NumPy 数组、列表、来自另一个 DataFrame 的列等。另一个例子,过滤掉 18 岁或以上的人:
版:
您可以按照相同的想法按日期过滤,例如我们可以过滤
Fecha
当前日期和 30 天前之间的行:也可以使用几个条件,例如以前的条件但也是女性:
可以使用索引以相同的方式或使用过滤它
loc
,例如,如果我们的列Fecha
在 DataFrame 索引(DateTimeIndex)中,我们可以这样做: