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

遍历客户文件夹合并CSV为DataFrame代码故障排查求助

解决合并多客户surveys.csv文件的问题

我来帮你排查下代码里的问题,然后给出能正常读取全部15份文件的修正版本:

原代码的核心问题

  • 路径处理错误:os.walk的参数不需要加*,应该直接传入../customer_data;而且你用glob.glob(os.path.join(rootdir, 'surveys.csv'))是在根目录找文件,不是当前遍历的子目录
  • customer_id赋值错误:你把os.path.dirname(这是个函数对象)直接赋值给列,而不是当前客户文件夹的名称
  • 缺失pandas导入:代码里用了pd.read_csv但没有导入pandas库
  • 文件读取逻辑混乱:嵌套循环里重复用glob,且pd.read_csv传入列表的逻辑不符合当前逐个处理子目录文件的需求

修正后的完整代码

import glob
import os
import pandas as pd  # 别忘了导入pandas库

# 直接指定根目录,无需加*
rootdir = '../customer_data'
dataframes = []

# 遍历所有客户文件夹
for customer_dir in glob.glob(os.path.join(rootdir, '*')):
    # 确保当前路径是文件夹,且目标文件存在
    if os.path.isdir(customer_dir):
        csv_path = os.path.join(customer_dir, 'surveys.csv')
        if os.path.exists(csv_path):
            # 读取当前客户的survey文件
            df = pd.read_csv(csv_path)
            # 提取文件夹名称作为customer_id
            df['customer_id'] = os.path.basename(customer_dir)
            dataframes.append(df)

# 合并所有DataFrame并重置索引
result = pd.concat(dataframes, ignore_index=True)
print(result.head())

代码说明

  1. 简洁的目录遍历:用glob.glob直接获取所有一级子目录,比os.walk更贴合当前只需要客户文件夹的需求
  2. 异常防护:增加了目录和文件的存在性检查,避免因目录结构异常导致报错
  3. 正确提取客户ID:用os.path.basename(customer_dir)精准提取文件夹名(比如customer_1)作为标识
  4. 清晰的逻辑流程:每个客户文件夹对应读取一个csv文件,添加标识后存入列表,最后统一合并

这样就能正确读取全部15个客户的surveys.csv文件,并合并成带customer_id列的完整DataFrame了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:37:27