Python循环追加CSV文件并添加指定列时类引用异常求助
解决CSV合并时添加来源名称的问题
嘿,我来帮你搞定这个问题!你说脚本能正确遍历每个CSV,但只返回一个类引用,大概率是在合并DataFrame或者添加来源列的环节出了问题。下面我给你一步步拆解解决方案,附上完整的可运行代码。
核心思路
你的需求本质是:遍历存储在DataFrame里的CSV路径,给每个读取后的DataFrame添加对应来源名称,最后合并成一个大DataFrame。关键要确保每一行的CSV路径和来源名称一一对应,并且每次读取后都把带来源列的临时DataFrame合并到结果里。
完整代码示例
假设你的原始DataFrame(df)包含两列:name(用来作为新增列的来源名称)和file_path(CSV文件的路径),代码如下:
import pandas as pd # 读取存储CSV路径和名称的DataFrame df = pd.read_csv("你的路径列表文件.csv") # 替换成你的实际文件路径 # 初始化空的合并结果DataFrame merged_result = pd.DataFrame() # 遍历每一行,获取来源名称和CSV路径 for _, row in df.iterrows(): source_name = row["name"] csv_file = row["file_path"] # 读取单个CSV文件到临时DataFrame temp_df = pd.read_csv(csv_file) # 给临时DataFrame添加来源名称列 temp_df["source_name"] = source_name # 合并到结果中(ignore_index=True避免索引重复) merged_result = pd.concat([merged_result, temp_df], ignore_index=True) # 查看合并后的结果 print(merged_result.head())
为什么你的代码可能出错?
- 可能误用了已弃用的
append()方法:pandas从2.0版本开始弃用DataFrame.append(),用它可能导致奇怪的返回结果,换成pd.concat()就没问题了。 - 没有正确迭代行数据:如果只取了df的某一列而非遍历每一行,会导致只处理最后一个文件或者返回对象引用。
- 忘记设置
ignore_index=True:合并时不重置索引会导致索引混乱,后续操作可能出问题。
优化建议(可选)
如果你的CSV文件数量多或者体积大,可以加个异常处理避免脚本崩溃,还能看到处理进度:
import pandas as pd df = pd.read_csv("你的路径列表文件.csv") merged_result = pd.DataFrame() for idx, row in df.iterrows(): source_name = row["name"] csv_file = row["file_path"] try: temp_df = pd.read_csv(csv_file) temp_df["source_name"] = source_name merged_result = pd.concat([merged_result, temp_df], ignore_index=True) print(f"✅ 已合并: {csv_file} (来源: {source_name})") except FileNotFoundError: print(f"❌ 警告: 文件不存在 - {csv_file}") except Exception as e: print(f"❌ 处理 {csv_file} 出错: {str(e)}") print("\n合并完成!前5行数据如下:") print(merged_result.head())
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

