Python结合kwargs使用未知长度值列表过滤Dataframe的实现方案
实现方案
你可以直接使用Pandas内置的isin()方法完成任意长度列表的匹配过滤,这是最简洁的实现方式:
# target_list 可以替换为任意长度的列表x/y/z filtered_df = df[df['column'].astype(str).isin(target_list)]
原有代码错误原因
- 语法层面:
for arg in *args写法不合法,解包语法不能直接放在in后面做迭代 - 逻辑层面:循环中反复对df做重赋值过滤,每次的判断条件是「等于当前arg」,相当于多条件是且的关系,最终只会保留同时等于所有arg的行,自然不会有符合条件的结果。
可选的多条件拼接实现(仅做参考)
如果你需要手动实现类似你最初的多条件「或」拼接逻辑,可以用functools.reduce配合逻辑或操作完成:
from functools import reduce import operator target_list = ['one', 'two', 'three', 'four'] # 生成所有条件的列表 conditions = [df['column'].astype(str) == val for val in target_list] # 对所有条件做逻辑或拼接 filtered_df = df[reduce(operator.or_, conditions)]
内容的提问来源于stack exchange,提问作者Shawn Jamal
相关产品推荐
相关产品推荐

