遍历客户文件夹合并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())
代码说明
- 简洁的目录遍历:用
glob.glob直接获取所有一级子目录,比os.walk更贴合当前只需要客户文件夹的需求 - 异常防护:增加了目录和文件的存在性检查,避免因目录结构异常导致报错
- 正确提取客户ID:用
os.path.basename(customer_dir)精准提取文件夹名(比如customer_1)作为标识 - 清晰的逻辑流程:每个客户文件夹对应读取一个csv文件,添加标识后存入列表,最后统一合并
这样就能正确读取全部15个客户的surveys.csv文件,并合并成带customer_id列的完整DataFrame了。
内容的提问来源于stack exchange,提问作者dsexplorer
相关产品推荐
相关产品推荐

