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
相关产品推荐
相关产品推荐

