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

如何用Pandas按文件名3字母前缀将CSV合并为对应XLSX?

解决按文件名前缀分组合并CSV到对应XLSX的问题

我明白你的问题啦——现在你的代码其实是把所有CSV的数据全合并到同一个full_df里,然后每循环一个文件就用当前文件的前缀存一次XLSX,结果就是四个文件里全是所有数据的副本,根本没按前缀分组对吧?你的思路是对的,我们需要给每个前缀单独维护一个DataFrame,这里用字典来管理会非常方便,下面是具体的实现方案:

修改后的代码

import pandas as pd
import os

# 初始化一个字典,用来存储每个3字母前缀对应的DataFrame
prefix_dfs = {}
folder_path = 'C:/Users/XXXXXX/ZZZZZZ'

for filename in os.listdir(folder_path):
    if filename.endswith(".csv"):
        print(f"Processing {filename}")
        # 提取3字母前缀和年份
        prefix = filename[:3]
        year = filename[-8:-4]
        
        # 读取CSV数据,注意拼接完整路径避免找不到文件
        df = pd.read_csv(os.path.join(folder_path, filename), skiprows=1, names=['ID','Units Sold','Retail Dollars'])
        df['Year'] = year
        
        # 按前缀分组存储数据
        if prefix not in prefix_dfs:
            # 该前缀的第一个文件,直接初始化DataFrame
            prefix_dfs[prefix] = df
        else:
            # 已有该前缀的数据,追加合并
            prefix_dfs[prefix] = pd.concat([prefix_dfs[prefix], df], ignore_index=True)

# 遍历字典,将每个前缀的DataFrame写入对应XLSX文件
for prefix, df in prefix_dfs.items():
    output_filename = f"{prefix}.xlsx"
    df.to_excel(output_filename, index=False)
    print(f"Successfully saved {output_filename}")

关键改进点说明

  • 用字典管理分组数据:prefix_dfs的键是3字母前缀,值是对应前缀的所有CSV合并后的DataFrame,精准区分不同分组的数据,就算以后前缀数量变化也不用改核心逻辑。
  • 修复文件路径问题:原来的代码直接用filename读取,可能会因为工作目录和目标文件夹不一致导致找不到文件,用os.path.join(folder_path, filename)拼接完整路径更稳妥。
  • 独立写入每个分组:最后遍历字典,把每个前缀对应的DataFrame单独写入XLSX,确保每个文件只包含对应前缀的CSV数据。

这样修改后,你就能得到四个分别对应不同3字母前缀的XLSX文件,每个文件里只有对应前缀的CSV合并数据啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:32:53