如何在Pandas中按原始CSV命名规则保存拼接后的DataFrame
解决CSV文件批量拼接并按规则命名输出的问题
问题分析
你的需求是批量读取同前缀的CSV文件,拼接后按[前缀]_[年月]_month.csv格式保存,但现有代码存在以下问题:
- 循环语句存在多余缩进,会导致语法错误
- 输出文件名仅使用了最后一个文件的名称片段,未按要求提取统一前缀和年月
- 没有实现从文件名中提取前缀(如
ANGOSTURA_U1)和年月(如202209)的逻辑
修正后的代码
import pandas as pd import glob import os # 定义文件路径 input_dir = "C:/Users/ep_irojaso/Desktop/PROGRAMA DESEMPEÑO/saturnmensual/" output_dir = "C:/Users/ep_irojaso/Desktop/PROGRAMA DESEMPEÑO/Saturn2mensual/" # 获取所有CSV文件路径 all_files = glob.glob(f"{input_dir}*.csv") file_list = [] # 批量读取文件 for f in all_files: # 只读取指定列 data = pd.read_csv(f, usecols=["t", "f"]) file_list.append(data) # 拼接所有数据 df = pd.concat(file_list, ignore_index=True) # 提取前缀和年月(从第一个文件获取,因为文件夹内只有一类前缀) first_file_name = os.path.basename(all_files[0]) # 拆分文件名:比如ANGOSTURA_U1_20220901.csv -> ['ANGOSTURA_U1', '20220901', 'csv'] name_parts = first_file_name.split(".")[0].split("_") # 前缀是前两部分拼接:ANGOSTURA_U1 prefix = "_".join(name_parts[:2]) # 年月是日期部分的前6位:20220901 -> 202209 year_month = name_parts[2][:6] # 生成输出文件名 output_file_name = f"{prefix}_{year_month}_month.csv" output_path = os.path.join(output_dir, output_file_name) # 保存拼接后的文件 df.to_csv(output_path, index=False)
关键逻辑说明
- 路径处理:单独定义输入输出目录,让代码更易维护
- 前缀与年月提取:从第一个文件名中拆分信息,因为文件夹内只有一类前缀,确保命名统一
- 拆分文件名时,先去掉后缀
.csv,再按_分割成片段 - 前缀取前两个片段拼接(如
ANGOSTURA和U1) - 年月取日期片段的前6位(如
20220901截取为202209)
- 拆分文件名时,先去掉后缀
- 保存文件:使用
os.path.join拼接路径,避免跨系统路径问题,同时设置index=False防止保存额外的索引列
内容的提问来源于stack exchange,提问作者Isaac Rojas Oyarzun
相关产品推荐
相关产品推荐

