如何用Pandas加载分目录存储的CSV文件并拆分列完成数据分析
多目录CSV批量加载与Pandas分析实现方案
固定目录结构的匹配逻辑
针对A/B根目录下分设Time、Error子目录、固定文件名的存储结构,无需全局遍历扫描全目录,直接通过路径规则精准匹配目标文件,避免误读同名文件:
- 匹配规则:
任意一级A/B根目录/Time/task_time.csv、任意一级A/B根目录/Error/task_error.csv - 预处理要求:原始CSV为单列存储,加载后按实际分隔规则拆分为3列
- 数据溯源:加载时标记每条数据的来源根目录、所属子目录类型,方便后续分组计算
分步代码实现
1. 导入依赖
import pandas as pd from pathlib import Path
使用pathlib做路径处理,无需手动拼接字符串,兼容不同操作系统的路径格式。
2. 批量定位目标文件
# 替换为自己数据集所在的总父路径 base_dir = Path("./本地数据集总存储路径") # 精准匹配所有符合规则的目标文件 target_files = [ *base_dir.glob("A/Time/task_time.csv"), *base_dir.glob("B/Time/task_time.csv"), *base_dir.glob("A/Error/task_error.csv"), *base_dir.glob("B/Error/task_error.csv") ]
3. 加载并拆分单列CSV
data_fragments = [] for file_path in target_files: # 读取无表头的单列原始CSV raw_df = pd.read_csv(file_path, header=None, names=["raw_line"]) # 拆分单列内容为3列,分隔符根据实际CSV的列间隔规则调整(如逗号、竖线、连续空格等) split_part = raw_df["raw_line"].str.split( pat=r",", # 替换为自己实际的分隔符 n=2, # 拆分3列需要2次拆分动作 expand=True ) split_part.columns = ["col1", "col2", "col3"] # 追加数据溯源标记,避免多来源数据混淆 split_part["source_root"] = file_path.parts[-3] split_part["category"] = file_path.parts[-2] data_fragments.append(split_part) # 合并所有分片为可直接分析的总DataFrame full_df = pd.concat(data_fragments, ignore_index=True)
4. 后续分析操作示例
以计算所有task_time.csv的数值列均值为例:
# 筛选所有Time类别的数据 time_dataset = full_df[full_df["category"] == "Time"] # 转换目标计算列为数值类型,非数值内容自动转为缺失值,不干扰计算 time_dataset["col3"] = pd.to_numeric(time_dataset["col3"], errors="coerce") # 计算列均值 time_avg = time_dataset["col3"].mean()
常见问题排查
- 拆分列时出现值缺失:检查
str.split的分隔符是否与实际CSV内容一致,含正则特殊字符的分隔符需要做转义处理 - 溯源标记取值错误:打印
file_path.parts查看路径分段的索引顺序,根据实际层级调整取值索引即可 - 读取CSV丢失首行数据:无表头的原始CSV必须加
header=None参数,否则第一行内容会被识别为列名 - 均值计算结果异常:必须对拆分得到的数值列做类型转换,未转换的字符串类型会导致计算逻辑报错
内容的提问来源于stack exchange,提问作者Rak1994
相关产品推荐
相关产品推荐

