如何在for循环中筛选多个DataFrame中含指定值的行?
问题分析与解决
你的代码无法生效主要有两个核心问题:
- 临时变量赋值未修改原列表:循环中
d = d.loc[...]只是把临时变量d指向了新的筛选结果,原列表MasterFiles里的DataFrame并没有被更新。 - 列名变量拼写错误:
ColumName应该修正为ColumnName(少了一个n),否则会引发列名查找错误。
解决方案
方法1:生成新的筛选后DataFrame列表(推荐)
这种方式不会修改原数据,更安全清晰:
# 修正列名拼写 ColumnName = 'product_category' # 用列表推导式快速筛选,因为只有一列,无需嵌套循环 filtered_master_files = [df.loc[df[ColumnName] == 'XXX'] for df in MasterFiles]
方法2:直接修改原列表的元素
如果需要更新原MasterFiles列表,可以通过索引遍历修改:
ColumnName = 'product_category' for idx in range(len(MasterFiles)): # 获取当前索引对应的DataFrame current_df = MasterFiles[idx] # 筛选后重新赋值给原列表的对应位置 MasterFiles[idx] = current_df.loc[current_df[ColumnName] == 'XXX']
补充说明
- 你的代码里
ColumnName是只有一个元素的列表,没必要嵌套两层循环,直接用单个列名字符串更高效。 - 如果需求是筛选包含XXX而非等于XXX,可以用
df[ColumnName].str.contains('XXX', na=False)(na=False用来排除空值)。
内容的提问来源于stack exchange,提问作者Gopi S
相关产品推荐
相关产品推荐

