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

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)。
  • 避免重复:自动排除输出文件,防止重复合并已生成的结果。

使用提示:

  1. 将所有需要合并的CSV文件放在和Python脚本同一文件夹下。
  2. 如果CSV文件不在当前目录,修改glob.glob的路径(比如glob.glob("data/*.csv")表示data子文件夹下的所有CSV)。
  3. 若部分文件无时间信息,可根据需求修改minutes = 'N/A'为其他默认值,或跳过此类文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:40:43