如何用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
相关产品推荐
相关产品推荐

