您的位置:

Pandas条件筛选详解

一、基础条件筛选

Pandas是Python中非常常用的数据处理库,对于数据筛选和清洗也非常方便,条件筛选就是其中一项重要的功能。

当需要从DataFrame中选择满足某些条件的数据,可以使用基础条件筛选。这种筛选方式使用Boolean Indexing进行数据的选取。

import pandas as pd

#创建示例DataFrame
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David'],
                   'age': [25, 35, 17, 28],
                   'sex': ['F', 'M', 'M', 'M']})

#使用条件筛选获取DF中年龄大于25岁的数据
df[df['age'] > 25]

以上代码通过Boolean indexing,实现了从DataFrame中筛选出年龄大于25岁的数据。筛选条件[df['age'] > 25]返回了一列布尔值,对DF进行筛选时,只选取布尔值为True的行。

二、复合条件筛选

在数据处理中,可能需要使用多个条件进行筛选。使用符号"&"、"|"、"~"实现多个条件的组合筛选。

import pandas as pd

#创建示例DataFrame
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David'],
                   'age': [25, 35, 17, 28],
                   'sex': ['F', 'M', 'M', 'M']})

#使用复合条件筛选获取DF中年龄大于25岁且性别为男性的数据
df[(df['age'] > 25) & (df['sex'] == 'M')]

以上代码使用"&"进行了年龄大于25且性别为男性的复合条件筛选。根据Python运算优先级,使用圆括号括起每个条件的部分提高了代码的可读性。

三、使用isin进行多项匹配筛选

在某些情况下,需要在列表或Series中使用多项来筛选DataFrame中的数据,这时可以使用isin方法。

import pandas as pd

#创建示例DataFrame
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David'],
                   'age': [25, 35, 17, 28],
                   'sex': ['F', 'M', 'M', 'M']})

#使用isin筛选DF中sex 为 F 或 M的行
df[df['sex'].isin(['F', 'M'])]

以上代码使用isin进行了多项条件的匹配,提高了代码的可读性和精简性。

四、使用query方法进行条件筛选

在某些情况下,多个筛选条件的集成可能会使代码变得非常复杂。这时可以使用query方法简化代码。

import pandas as pd

#创建示例DataFrame
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David'],
                   'age': [25, 35, 17, 28],
                   'sex': ['F', 'M', 'M', 'M']})

#使用query方法筛选DF中age大于25岁或者sex为F的行
df.query("sex=='F' or age>25")

以上代码中,query方法将子字符串"sex == 'F' or age > 25"作为条件筛选,运行结果与使用&、|和()的几乎相同。

五、使用eval方法进行高性能筛选

当需要在DataFrame中进行高性能筛选时,Pandas提供了一个eval方法。eval方法可以将表达式字符串传递给DataFrame.eval()方法,它会使用numexpr库和覆盖的算术运算符处理表达式,以获得更快的计算结果。

import pandas as pd

#创建示例DataFrame
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David'],
                   'age': [25, 35, 17, 28],
                   'sex': ['F', 'M', 'M', 'M']})

#使用eval方法筛选DF中age大于25岁或者sex为F的行
df.eval("age > 25 or sex=='F'")

以上代码中,使用eval()方法对包含我们要筛选的表达式字符串进行操作,得到一个符合条件的Series。

结论

通过这篇文章,我们对Pandas条件筛选的基础知识、复合条件筛选、多项匹配筛选、query方法和eval方法进行了详细阐述。通过掌握这些筛选技巧,我们可以更加高效地选择和清洗数据。