Python实现多单列CSV按列合并并自定义列标题
批量合并单列CSV并自定义列标题
以下是针对你的需求优化后的代码,实现批量处理所有CSV文件,并按照规则自动提取列标题:
import pandas as pd import glob import re # 获取当前目录下所有CSV文件 file_list = glob.glob("*.csv") # 排除输出文件(避免重复合并) output_filename = "merged_output.csv" if output_filename in file_list: file_list.remove(output_filename) # 初始化合并后的DataFrame merged_df = pd.DataFrame() for file in file_list: # 读取单个CSV文件 temp_df = pd.read_csv(file) # 1. 提取分钟数:匹配文件名中的数字+min/h,h转换为分钟 time_match = re.search(r'(\d+)\s*(min|h)', file) if time_match: time_val = int(time_match.group(1)) time_unit = time_match.group(2) minutes = time_val * 60 if time_unit == 'h' else time_val else: minutes = 'N/A' # 无匹配时的默认值 # 2. 提取export_后的第一个单词 after_export = file.split('_')[1] first_word = after_export.split(' ')[0] # 3. 完整文件名 full_name = file # 组合自定义列标题(可根据喜好调整分隔符) custom_header = f"{minutes}分钟 | {first_word} | {full_name}" # 重命名当前文件的列 temp_df.columns = [custom_header] # 合并到主DataFrame merged_df = pd.concat([merged_df, temp_df], axis=1) # 保存合并后的文件 merged_df.to_csv(output_filename, index=False) print(f"合并完成,文件已保存为 {output_filename}")
代码说明:
- 批量获取文件:
glob.glob("*.csv")会自动收集当前文件夹下所有CSV文件,无需手动输入文件名列表。 - 分钟数提取:通过正则表达式匹配文件名中的时间信息,自动将小时转换为分钟(如4h转为240分钟),无时间信息时显示"N/A"。
- 列标题生成:按照你要求的三个规则组合成列标题,分隔符可自行修改(比如用
_代替|)。 - 合并逻辑:将每个CSV文件作为一列合并到主表,自动对齐行索引,行数不一致时缺失值会显示为空白(NaN)。
- 避免重复:自动排除输出文件,防止重复合并已生成的结果。
使用提示:
- 将所有需要合并的CSV文件放在和Python脚本同一文件夹下。
- 如果CSV文件不在当前目录,修改
glob.glob的路径(比如glob.glob("data/*.csv")表示data子文件夹下的所有CSV)。 - 若部分文件无时间信息,可根据需求修改
minutes = 'N/A'为其他默认值,或跳过此类文件。
内容的提问来源于stack exchange,提问作者volda
相关产品推荐
相关产品推荐

