python - 将 JSON 数据转换为 CSV 电子表格
问题描述
我正在尝试将具有标题和数字数据的 JSON 文件转换为 CSV 文件。我是 python 的超级新手,知道我缺少一些信息,但我不确定我需要寻找什么。
这是我到目前为止尝试过的代码:
import json
import csv
with open('my_json_file.json', 'r') as data:
global invt_data
invt_data = json.load(data)
with open('my_csv_file.csv','w') as inverter_data:
writer = csv.writer(inverter_data)
writer.writerows(invt_data)
inverter_data.close()
这将写入我想要的文件,但它只创建了三行数据标题,没有任何值。我非常感谢任何帮助或正确方向的指针!谢谢!
我最近编辑了我的代码以尝试一种新方法:
import json
import csv
with open('/Users/cpiephoff/Desktop/2019_09_16_INVT_2.json','r') as data:
global invt_data
invt_data = json.load(data)
time_data = invt_data['Timeseries']
power_data = invt_data['power_true_kw']
frequency_data = invt_data['power_frequency']
inverter_data = open('/Users/cpiephoff/Desktop/2019_09_16_INVT_2.csv','w')
csvwriter = csv.writer(inverter_data)
for time in time_data:
csvwriter.writerows(time.values())
for power in power_data:
csvwriter.writerows(power.values())
for frequency in frequency_data:
csvwriter.writerows(frequency.values())
inverter_data.close()
使用这种方法,我的时间序列会引发错误
str 没有属性值
功率和频率数据抛出错误
float 没有属性值
我该如何解决这个问题,以便将数据获取到 csv 文件?
示例 JSON 数据:
{"Timeseries": ["2019-04-01T16:00:00+00:00",
"2019-04-01T16:01:00+00:00",
"2019-04-01T16:02:00+00:00"],
"power_true_kw": [125.5, 127.8, 129.9],
"power_frequency": [60.0, 59.9, 60.1]}
解决方案
您有许多长度相等的列表,它们是您的列数据,需要将它们转置为行。
您可以使用zip内置函数来执行此操作:给定一些可迭代对象,它将同时迭代它们,生成包含每个可迭代对象中的第一个元素和每个可迭代对象中的第二个元素的元组,直到用完最短的可迭代对象
>>> cols = ['abc', 'def', 'ghi']
>>> list(zip(*cols))
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
此技术可应用于数据字典的值以生成 csv 文件。
with open('outfile.csv', 'w', newline='') as f:
writer = csv.writer(f)
# Write the headers
writer.writerow(list(invt_data.keys()))
# Write the data
writer.writerows(list(zip(*invt_data.values())))
生成此文件:
Timeseries,power_true_kw,power_frequency
2019-04-01T16:00:00+00:00,125.5,60.0
2019-04-01T16:01:00+00:00,127.8,59.9
2019-04-01T16:02:00+00:00,129.9,60.1
推荐阅读
- angular - 回调按钮时角度删除查询参数
- javascript - 反应本机(博览会)网络视图错误 net::ERR_CACHE_MISS
- php - DiscriminatorMap 注解中的环境变量或函数
- laravel - Api Endpoint 中不存在 Authorizarion 标头 - Laravel
- javascript - 如何使最小填充图表js折线图
- angular - 从 Angular 8 应用程序向身份验证 API 端点发出请求会导致 CORS 错误,而来自 Postman 的相同请求可以完美运行文件
- laravel - .env 文件中的 MySQL 密码不起作用,但在 database.php 中工作正常(env() 缓存旧密码,config:clear 不会删除它)
- mysql-8.0 - MySQLSyntaxErrorException:升级时您的 SQL 语法有错误
- jquery - 如何在jQuery中声明和初始化变量
- android-studio - 如何在模拟器上安装应用程序导致 adb 出错