如何筛选Pandas DataFrame中属于指定列表的列元素?
解决Pandas DataFrame筛选列表元素的问题
嘿,我懂你遇到的这个困扰!你试的两种方法确实都不对,这是Pandas里很容易踩的小坑,我来给你讲清楚原因和正确的做法~
首先先复盘下你的场景:
import pandas as pd df = pd.DataFrame( data = [ 'a', 'b', 'c', 'b', 'c', 'a' ], columns = [ 'char' ] ) l = [ 'a', 'b' ]
为什么你之前的方法行不通?
df.char == l:Pandas的Series和列表直接用==比较时,会尝试按位置一一匹配,你的列表长度是2,而Series有6行,这时候要么触发广播错误,要么得到完全不符合预期的布尔结果,根本不是检查元素是否在列表里。df.char in l:这个写法是检查Series的索引标签是否在列表l里,而不是检查每个元素值,所以完全不是你想要的逻辑。
正确的筛选方法
方法1:使用isin()(推荐!)
Pandas专门提供了isin()方法,用来快速判断每个元素是否在目标可迭代对象里,用法超简单:
# 筛选出char列属于列表l的行 filtered_df = df[df.char.isin(l)] print(filtered_df)
运行结果:
char 0 a 1 b 3 b 5 a
方法2:逻辑或拼接(适合短列表)
如果你的列表很短,也可以用多个==加上逻辑或|来实现:
filtered_df = df[(df.char == 'a') | (df.char == 'b')]
结果和上面完全一样,但如果列表l有很多元素,这种写法就太繁琐了,还是isin()更高效简洁。
这样就能精准筛选出你想要的行啦😉
内容的提问来源于stack exchange,提问作者bcf
相关产品推荐
相关产品推荐

