Python 将JSON数据转换为CSV电子表格

Python 将JSON数据转换为CSV电子表格,python,python-3.x,Python,Python 3.x,我正在尝试将包含标题和数字数据的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 inverte

我正在尝试将包含标题和数字数据的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()
使用这种方法,我的timeseries会抛出错误

str没有属性值

功率和频率数据会抛出错误

float没有属性值

如何修复此问题,以便将数据获取到csv文件

示例JSON数据:
一种方法可以是使用。Pandas是一个非常丰富的Python数据管理工具。一开始你可能有点难以理解,但它非常有用,并且为数据分析和操作提供了很多实用工具。致:

您可以使用预览数据,也可以使用查看有关数据框的信息和摘要统计信息。根据JSON文件具有“变量头”的说法,我怀疑您的行中没有每列的条目。您可以决定如何处理这些行,并应用(例如)缺少的值:

df.interpolate(method='linear', inplace=True)
或者,您可以使用例如零:

df.fillna(value=0, inplace=True)
然后,您可以使用:


您有许多长度相等的列表,它们是您的列数据,需要将它们转换为行

您可以使用内置函数来实现这一点:给定一些iterable,它将同时对它们进行迭代,生成元组,其中包含每个iterable中的第一个元素,每个iterable中的第二个元素,直到最短iterable耗尽

>>> 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())))
生成此文件:

时间序列、功率、功率、频率
2019-04-01T16:00:00+00:00125.5,60.0
2019-04-01T16:01:00+00:00127.8,59.9
2019-04-01T16:02:00+00:00129.9,60.1

通过“变量头”,您的意思是不是JSON文件中的每个元素都由相同的数据元素组成?因此,您将得到一个CSV,其中包含整个JSON文件中看到的所有列标题,但每一行可能没有每个列的条目?您是否有可能提供两个示例JSON条目来说明问题?@Engineero我现在明白,我的措辞不适合“可变标题”。每一列都有数据。这是json文件:{“Timeseries”:[“2019-04-01T16:00:00+00:00”,“2019-04-01T16:01:00+00:00”,“2019-04-01T16:02:00+00:00”],“功率真实功率”:[125.5127.8129.9],“功率频率”:[60.0,59.9,60.1]}
df.to_csv('my_csv_file.csv')
>>> cols = ['abc', 'def', 'ghi']
>>> list(zip(*cols))
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
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())))