一、基础条件筛选
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方法进行了详细阐述。通过掌握这些筛选技巧,我们可以更加高效地选择和清洗数据。