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

Python实现JSON转CSV:按ts分行、指标为列的需求与问题

问题解决:将JSON转换为按时间戳(ts)分行的CSV

需求说明

给定的JSON数据按传感器类型分组,每个组包含多条带时间戳(ts)和对应值(value)的记录。需要将其转换为CSV格式,要求同一时间戳的所有传感器值放在同一行,时间戳作为单独一列,各传感器类型作为列名。

原代码的问题在于逐传感器逐条写入数据,导致每个传感器值单独占一行,且未包含时间戳字段,最终格式不符合需求。

修正后的代码

import csv
import json

# 加载JSON数据
data = json.loads('{"temperature": [{"ts": 1672753924545, "value": "100"}], "temperature c1": [{"ts": 1672753924545, "value": "30.99036523512186"}], "conductivite_c1": [{"ts": 1672753924545, "value": "18.195760116755046"}], "pression_c1": [{"ts": 1672753924545, "value": "10.557751448931295"}], "ph_c1": [{"ts": 1672753924545, "value": "10.443975738053357"}], "http": [{"ts": 1672753924545, "value": "400"}]}')

# 按时间戳分组,收集每个ts对应的所有传感器值
ts_groups = {}
for sensor, records in data.items():
    for record in records:
        ts = record['ts']
        # 初始化该时间戳的存储字典
        if ts not in ts_groups:
            ts_groups[ts] = {'ts': ts}
        # 将当前传感器值存入对应时间戳的字典
        ts_groups[ts][sensor] = record['value']

# 生成CSV文件
with open('data.csv', 'w', newline='') as csvfile:
    # 定义列名:先ts字段,再所有传感器名称
    fieldnames = ['ts'] + list(data.keys())
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    
    writer.writeheader()
    # 遍历每个时间戳分组,写入整行数据
    for ts_row in ts_groups.values():
        writer.writerow(ts_row)

代码说明

  1. 按时间戳分组:用字典ts_groups将同一时间戳的所有传感器值整合到一起,确保每条时间戳对应一行数据。
  2. 构造列名:CSV列名优先包含ts字段,再依次列出所有传感器类型,保证表头完整。
  3. 写入CSV:先写入表头,再将每个时间戳对应的整合数据写入文件,符合需求格式。

输出示例

生成的CSV内容如下:

ts,temperature,temperature c1,conductivite_c1,pression_c1,ph_c1,http
1672753924545,100,30.99036523512186,18.195760116755046,10.557751448931295,10.443975738053357,400

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:35:36