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

基于Pandas按配方分类汇总多CSV文件月度总容积[m³]

非标准CSV批量分类汇总解决方案

核心思路

针对非标准键值对格式的CSV,放弃直接用pd.read_csv(),改为逐行解析提取目标字段,再批量遍历月度文件夹完成分类汇总。

1. 单个非标准CSV解析函数

根据CSV的键值对格式(比如配方名称: XXX、Total volume[m³]: 120.5),手动读取每行提取数据:

import os
import pandas as pd
import re

def parse_single_csv(file_path):
    recipe_name = None
    total_volume = 0.0
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            if not line:
                continue
            # 匹配配方名称(可根据实际格式调整匹配规则)
            if '配方名称:' in line:
                recipe_name = line.split(':', 1)[1].strip()
            # 用正则匹配总容积数值,兼容不同格式的数值写法
            volume_match = re.search(r'Total volume\[m³\]:\s*(\d+\.?\d*)', line)
            if volume_match:
                try:
                    total_volume = float(volume_match.group(1))
                except ValueError:
                    total_volume = 0.0
        # 仅返回有效数据条目
        if recipe_name:
            return {'配方名称': recipe_name, 'Total volume[m³]': total_volume}
        return None

2. 月度文件夹批量处理

遍历指定月度文件夹下的所有CSV,汇总单月数据:

def process_monthly_folder(folder_path):
    monthly_records = []
    for filename in os.listdir(folder_path):
        if filename.lower().endswith('.csv'):
            full_path = os.path.join(folder_path, filename)
            record = parse_single_csv(full_path)
            if record:
                monthly_records.append(record)
    # 生成月度汇总表
    if monthly_records:
        df = pd.DataFrame(monthly_records)
        summary = df.groupby('配方名称')['Total volume[m³]'].sum().reset_index()
        # 从文件夹名称提取月份信息
        summary['月份'] = os.path.basename(folder_path)
        return summary
    return pd.DataFrame()

3. 多月度数据合并汇总

遍历根目录下的所有月度文件夹,合并所有结果:

def process_all_months(root_dir):
    all_summary = []
    for folder_name in os.listdir(root_dir):
        folder_path = os.path.join(root_dir, folder_name)
        if os.path.isdir(folder_path):
            monthly_data = process_monthly_folder(folder_path)
            if not monthly_data.empty:
                all_summary.append(monthly_data)
    # 合并并排序最终结果
    if all_summary:
        final_df = pd.concat(all_summary, ignore_index=True)
        final_df = final_df.sort_values(by=['月份', '配方名称'])
        return final_df
    return pd.DataFrame()

# 示例调用
root_dir = '你的月度文件夹根路径'
final_result = process_all_months(root_dir)
# 导出到Excel方便查看
final_result.to_excel('配方容积月度汇总.xlsx', index=False)

灵活调整点

  • 如果CSV编码是GBK,把encoding='utf-8'改为encoding='gbk'
  • 若CSV格式不是键: 值,修改parse_single_csv里的匹配逻辑(比如针对固定位置的字段用切片提取)
  • 可添加错误捕获,跳过损坏的CSV文件避免批量处理中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:05:09