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

遍历文件夹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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:24:55