将CSV转换为Python嵌套字典/JSON:按ID分组时间戳流量数据
如何将含重复ID的时间序列CSV转换为嵌套字典/JSON
嘿,我懂你现在的需求——把这份每15分钟一条记录的CSV时间序列数据,转换成按ID分组的嵌套字典或者JSON格式对吧?之前用groupby没搞定可能是细节没处理到位,比如分组后的数据转换步骤不对,下面给你两种实用的解决方案,不管用不用第三方库都能搞定:
方法一:用Pandas快速实现(适合数据量大的场景)
如果你已经在使用Pandas,这个方法效率很高,能快速处理大量数据:
import pandas as pd import json # 读取CSV文件,确保header=0对应你的表头行 df = pd.read_csv('your_data.csv', header=0) # 按ID分组,将每组的datetime和flow字段转成字典列表 nested_dict = df.groupby('ID').apply( lambda group: group[['datetime', 'flow']].to_dict('records') ).to_dict() # 如果需要导出为JSON格式 json_output = json.dumps(nested_dict, indent=4) print(json_output)
为什么之前的groupby可能失败?
大概率是你没在分组后正确提取需要的字段并转换格式。这里的to_dict('records')会把每组的每一行转成{'datetime': ..., 'flow': ...}的字典,再组合成列表,最后外层的to_dict()把分组结果转成以ID为键的字典,完美匹配你想要的结构。
方法二:纯Python实现(无需第三方库)
如果不想依赖Pandas,用标准库就能搞定,逻辑更直观,适合小体量数据:
import csv import json nested_dict = {} with open('your_data.csv', 'r') as csv_file: # 用DictReader直接把每行转成字典,自动识别表头 reader = csv.DictReader(csv_file) for row in reader: id_key = row['ID'] # 构造单条记录的字典,只保留需要的字段 record = { 'datetime': row['datetime'], 'flow': row['flow'] } # 按ID分组:存在则追加,不存在则新建列表 if id_key in nested_dict: nested_dict[id_key].append(record) else: nested_dict[id_key] = [record] # 转成格式化的JSON输出 json_output = json.dumps(nested_dict, indent=4) print(json_output)
一些注意事项
- 确保CSV里的表头和代码中的字段名完全匹配(比如
ID、datetime、flow的大小写不能错) - 如果需要把
flow转成数值类型(而不是字符串),可以把row['flow']改成float(row['flow'])或者int(row['flow']),根据你的数据类型调整 - 如果CSV里有缺失值,可以在读取时加入处理逻辑(比如Pandas里的
dropna(),或者纯Python里判断字段是否为空)
内容的提问来源于stack exchange,提问作者TrevP
相关产品推荐
相关产品推荐

