You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用For循环按指定名称列表过滤多个DataFrame,代码不生效如何解决

问题排查与修复方案

现有代码错误点

  • 数据结构错误:定义的df1是Python字典,不是Pandas DataFrame对象,无法直接使用DataFrame的筛选语法。
  • 列名不匹配:筛选使用的列名为ColumnName,但示例数据中存储名称的列名是Name,列名对应不上会直接报错或无匹配结果。
  • 大小写不匹配:待匹配列表name_lists中的值均为小写(如name1),但原数据中的名称为首字母大写格式(如Name1),isin为严格匹配,大小写不一致会导致匹配失败。
  • 循环赋值无效:循环中的dataframe是遍历dfs生成的临时变量,直接对其赋值不会修改dfs列表中存储的原DataFrame对象,筛选结果无法保留。

修复后代码

import pandas as pd

# 将字典转为DataFrame,df2/df3/df4同理处理
df1 = pd.DataFrame({
    "Name" :["Name1", "Name2", "Name3", "Name4"],
    "X":[30,40,50,60],
    "Y":[20,30,10,40],
    "Z":[10,20,20,10]
})
# 此处假设df2、df3、df4已经完成DataFrame转换
dfs = [df1, df2, df3, df4]
name_lists = ['name1','name2','name3','name5'] 

# 生成新列表存储筛选后的结果
filtered_dfs = []
for df in dfs:
    # 把Name列转小写后匹配,规避大小写差异问题
    filtered_df = df[df["Name"].str.lower().isin(name_lists)]
    filtered_dfs.append(filtered_df)

# 若需要直接修改原dfs列表,可使用索引遍历赋值
# for i in range(len(dfs)):
#     dfs[i] = dfs[i][dfs[i]["Name"].str.lower().isin(name_lists)]

如果不需要忽略大小写匹配,可去掉str.lower()方法,同时将name_lists的值调整为和原数据大小写一致的格式即可。

内容的提问来源于stack exchange,提问作者Qthry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:15:01