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

Pandas循环拼接DataFrame异常及文件写入问题求助

解决DataFrame循环筛选合并与文件写入问题

问题说明

需要基于特定值筛选DataFrame行且必须用for循环,原代码用.append()将筛选结果存入列表,输出是多个DataFrame的集合而非合并后的单张表;同时用.write()写入文件时因类型非字符串报错。

解决方案

1. 合并循环中的筛选结果

你当前的代码把多个DataFrame存入列表,返回的是列表对象,需要将列表中的DataFrame合并成单个DataFrame。可以用pd.concat()完成合并,同时保留for循环的要求:

修改后的代码如下:

import pandas as pd

df = pd.DataFrame({'a': [4, 5, 6, 7], 'b': [10, 20, 30, 40], 'c': [100, 50, -30, -50]})
df['diff'] = (df['b'] - df['c']).abs()
print(df)
df1 = df[df['diff'] == 90]
df2 = df[df['diff'] == 60]

df_list = [df1, df2]  # 避免用`list`作为变量名,和内置类型冲突

def try_1(df_list):
    output = []
    for item in df_list:
        output.append(item)
    # 合并列表中的所有DataFrame
    return pd.concat(output, ignore_index=True)

result_df = try_1(df_list)
print(result_df)

运行后输出:

a   b    c  diff
0  4  10  100    90
1  7  40  -50    90
2  6  30  -30    60

注意:ignore_index=True会重置合并后DataFrame的索引,让索引连续;不要用list作为变量名,会覆盖Python内置的list类型。

如果要求循环中逐行处理(而非直接添加整个DataFrame),可以改成这样:

def try_1(df_list):
    output_rows = []
    for df_item in df_list:
        # 遍历每个DataFrame的行,转成字典存入列表
        for _, row in df_item.iterrows():
            output_rows.append(row.to_dict())
    # 从字典列表生成新的DataFrame
    return pd.DataFrame(output_rows)

2. 解决文件写入报错问题

不能直接用文件对象的.write()方法写入DataFrame,因为DataFrame是Python对象而非字符串。可以用两种方式处理:

  • 方式一:将DataFrame转为字符串后写入,匹配你的预期输出格式
with open('result.txt', 'w', encoding='utf-8') as f:
    f.write(result_df.to_string(index=False))  # index=False去掉索引列
  • 方式二:用Pandas专门的文件写入方法(推荐,适合后续读取)
# 写入CSV文件
result_df.to_csv('result.csv', index=False)
# 写入Excel文件(需提前安装openpyxl库)
result_df.to_excel('result.xlsx', index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:35:33