遍历文件夹CSV文件并添加列时遇TypeError错误求助
问题分析与解决
错误原因
pd.merge()要求传入的合并对象必须是pandas的DataFrame或Series,但你的代码中传入了file(字符串类型的文件名),这直接触发了TypeError。此外修改后的代码还存在逻辑冗余——每次循环都重复合并已读取的ID数据,效率极低。
修正后的代码
import pandas as pd import glob # 第一步:预处理test_miti文件夹中的所有CSV,提取ID并生成标记DataFrame all_test_ids = [] test_miti_files = glob.glob('test_miti/*.csv', recursive=True) for miti_file in test_miti_files: # 读取每个test_miti文件的ID列 miti_df = pd.read_csv(miti_file, usecols=["ID"]) all_test_ids.append(miti_df) # 合并所有ID并去重,添加标记列 test_miti_result = pd.concat(all_test_ids, axis=0, ignore_index=True).drop_duplicates(subset=["ID"]) test_miti_result["test_miti_Flag"] = test_miti_result["ID"] # 按需求设置标记值,这里用ID本身,可自行修改 # 第二步:遍历目标文件夹的CSV,逐个处理 target_path = "C:/Users/j/Desktop/*.csv" for file_path in glob.glob(target_path): # 读取完整的目标CSV文件(不要只读取ID) target_df = pd.read_csv(file_path) # 合并标记列,左连接保留原文件所有数据 merged_df = pd.merge(target_df, test_miti_result, on="ID", how="left") # 填充空值为N/A(如果需要) merged_df["test_miti_Flag"] = merged_df["test_miti_Flag"].fillna("N/A") # 保存处理后的文件 merged_df.to_csv(f"{file_path}_wider.csv", sep=",", index=False)
关键修改说明
- 把test_miti文件夹的ID预处理逻辑放到循环外,只执行一次,避免重复计算
- 合并时传入的是读取后的DataFrame对象(
target_df),而非文件名字符串 - 读取目标CSV时保留完整数据(原代码只读取了ID列,会丢失其他数据)
- 添加了去重逻辑,避免test_miti中重复ID导致合并后数据行数膨胀
- 明确填充空值的逻辑,符合需求中的
na_rep="N/A"
内容的提问来源于stack exchange,提问作者e417927
相关产品推荐
相关产品推荐

