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

Python Pandas提取Azure成本导出CSV标签值并汇总成本

Azure成本CSV标签汇总处理方案

针对2.5GB/290万行的大文件场景,采用分块读取+逐块聚合的方式实现,避免全量加载导致的内存溢出,完全匹配需求规则。

原有初始代码问题说明

  • 直接全量读取整个CSV文件,内存占用过高,普通配置机器容易触发OOM崩溃
  • subsdata = bill(...)语法错误,DataFrame对象不能直接作为函数调用
  • CostInBillingCurrency是金额计算字段,读取为字符串类型无法直接做求和运算

核心处理逻辑

  • 读取阶段只加载Tags、CostInBillingCurrency两个必需字段,减少无效内存占用
  • 按固定行粒度分块读取处理,每块单独完成标签提取、金额清洗、分组聚合,最后合并所有块的聚合结果得到最终值
  • 预编译正则表达式匹配Azure-CostCenter标签,自动兼容键值对前后空格,提取标签值后自动去除首尾多余空格
  • 未匹配到目标标签、Tags字段为空的行,统一归入N/A分组
  • 金额字段自动做类型转换,异常空值/非数值按0处理,避免运行中断

完整实现代码

import pandas as pd
import re

# 可根据本机内存调整分块大小,内存越小数值调得越小
CHUNK_SIZE = 100000
INPUT_PATH = "Costs.csv"
OUTPUT_PATH = "consolidation.csv"
TARGET_TAG = "Azure-CostCenter"

# 预编译正则提升匹配效率,兼容Azure导出的标签键值对格式
tag_match_pattern = re.compile(rf'"{TARGET_TAG}"\s*:\s*"([^"]*)"')
total_cost_summary = pd.Series(dtype="float64")

# 分块迭代读取文件
for data_chunk in pd.read_csv(
    INPUT_PATH,
    usecols=["Tags", "CostInBillingCurrency"],
    chunksize=CHUNK_SIZE,
    low_memory=False
):
    # 清洗金额字段:转数值类型,异常值填充为0
    data_chunk["CostInBillingCurrency"] = pd.to_numeric(
        data_chunk["CostInBillingCurrency"], errors="coerce"
    ).fillna(0)

    # 提取目标标签值
    def get_target_tag_value(tag_content):
        if pd.isna(tag_content):
            return "N/A"
        match_res = tag_match_pattern.search(str(tag_content))
        if not match_res:
            return "N/A"
        return match_res.group(1).strip()

    data_chunk["tag_value"] = data_chunk["Tags"].apply(get_target_tag_value)

    # 当前块聚合
    chunk_summary = data_chunk.groupby("tag_value")["CostInBillingCurrency"].sum()
    # 合并到总汇总结果
    total_cost_summary = total_cost_summary.add(chunk_summary, fill_value=0)

# 整理结果格式,匹配导出框架要求
result = total_cost_summary.rename_axis(TARGET_TAG).rename("TotalCost")
# 按给定框架导出
result.to_csv(OUTPUT_PATH, index=True)

运行说明

  • 机器内存为16G时,CHUNK_SIZE设为100000-200000均可,全程内存占用不超过2G,处理290万行数据耗时约1-2分钟
  • 导出的CSV第一列为Azure-CostCenter标签值,第二列为对应分组的总成本,未匹配标签的行第一列为N/A
  • 自动处理标签值前后多余空格,不会因为空格导致同一成本中心被拆分为多个分组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:06:32