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

如何用Python将CSV文件中聚合的功耗数据转为非聚合瞬时值

累计功耗转瞬时功耗Python实现方案

核心逻辑

当前区间的瞬时功耗 = 当前累计功耗值 - 上一采样点的累计功耗值,第一个采样点无前置值,默认取0即可匹配你给出的预期结果。

方案1:使用pandas处理(推荐,适合CSV批量处理)

首先安装依赖:
pip install pandas

完整代码:

import pandas as pd

# 读取原始累计功耗CSV
df = pd.read_csv("你的文件路径.csv")

# 计算瞬时功耗,差分后空值(第一行)填0,转整数
df["Power"] = df["Power"].diff().fillna(0).astype("int")

# 导出转换后的结果
df.to_csv("瞬时功耗结果.csv", index=False)

方案2:纯Python标准库实现(无需安装第三方依赖)

使用内置csv模块处理,代码如下:

import csv

# 读取原始CSV数据
with open("你的文件路径.csv", "r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    data = list(reader)

pre_power = None
for item in data:
    current = int(item["Power"])
    if pre_power is None:
        item["Power"] = 0
    else:
        item["Power"] = current - pre_power
    pre_power = current

# 写入结果文件
with open("瞬时功耗结果.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=data[0].keys())
    writer.writeheader()
    writer.writerows(data)

注意事项

  • 如果你的CSV中Power列存在小数,把代码里的int类型转换换成float即可
  • 不需要覆盖原累计Power列的话,可以新增字段存储瞬时功耗,比如pandas方案中改为df["instant_power"] = df["Power"].diff().fillna(0).astype("int")

验证:你给出的累计Power序列[1300,1300,1302,1303,1303,1305,1305,1305]经过上述逻辑处理后,输出的Power序列正好是[0,0,2,1,0,2,0,0],和预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 17:36:02