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

循环遍历文件列表向对应DataFrame写入数据失败的解决方法

循环填充对应DataFrame的解决方法

你的代码问题核心是:df.append()会返回新的DataFrame对象,循环里的df = df.append(...)只是把新对象赋值给临时变量,并没有修改原列表dfs里的df1、df2,所以原DataFrame始终为空。

下面给两种简单的解决方式,都能满足你“每个文件对应一个填充好的DataFrame”的需求:

方法一:直接生成新的DataFrame列表(推荐)

不需要提前初始化df1、df2,直接在循环中处理每个文件并生成对应DataFrame,最后收集到列表里,逻辑更清晰:

import pandas as pd

filenames = ['file1.txt', 'file2.txt']
columns = ['a', 'b', 'c']
dfs = []

for name in filenames:
    # 初始化当前文件的空DataFrame
    current_df = pd.DataFrame(columns=columns)
    # 用with语句自动管理文件关闭,更安全
    with open(name, 'r') as info:
        # 这里替换成你的数据提取逻辑,比如从文件中找到目标值
        # 示例:假设提取到的字典格式数据如下
        extracted_data = {'a': 1, 'b': 2, 'c': 3}
        # 注意:Pandas 2.0+已弃用append,推荐用pd.concat替代
        current_df = pd.concat([current_df, pd.DataFrame([extracted_data])], ignore_index=True)
    dfs.append(current_df)

# 按需取出对应DataFrame
df1 = dfs[0]
df2 = dfs[1]

方法二:通过索引修改原列表

如果一定要保留提前初始化的DataFrame列表,可以用enumerate拿到索引,直接修改列表中的元素:

import pandas as pd

filenames = ['file1.txt', 'file2.txt']
columns = ['a', 'b', 'c']
# 提前初始化空DataFrame列表
dfs = [pd.DataFrame(columns=columns), pd.DataFrame(columns=columns)]

for idx, name in enumerate(filenames):
    with open(name, 'r') as info:
        extracted_data = {'a': 1, 'b': 2, 'c': 3}
        # 通过索引直接更新列表中的DataFrame
        dfs[idx] = pd.concat([dfs[idx], pd.DataFrame([extracted_data])], ignore_index=True)

df1 = dfs[0]
df2 = dfs[1]

注意事项

  • 优先用with语句打开文件,避免忘记关闭文件导致资源泄漏;
  • 如果你用的是Pandas 2.0及以上版本,append方法已经被弃用,用pd.concat或者直接创建新的DataFrame行来拼接是更稳妥的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:25:24