使用 Pandas 库将 JSON 转换为 CSV

Posted

技术标签:

【中文标题】使用 Pandas 库将 JSON 转换为 CSV【英文标题】:Converting JSON to CSV w/ Pandas Library 【发布时间】:2017-12-17 03:08:28 【问题描述】:

我在用 Python 将 JSON 文件转换为 CSV 时遇到问题,我不确定出了什么问题。转换完成,但不正确。我认为由于 JSON 文件的格式存在问题;但是,它是一个有效的 JSON。

这是我的 JSON 文件的内容:


    "tags": [
        "name": "ACDTestData",
        "results": [
            "groups": [
                "name": "type",
                "type": "number"
            ],
            "values": [
                [
                    1409154300000,
                    1.16003418,
                    3
                ],
                [
                    1409154240000,
                    0.024047852,
                    3
                ],
                [
                    1409153280000,
                    10.25598145,
                    3
                ],
                [
                    1409152200000,
                    10.73193359,
                    3
                ],
                [
                    1409151240000,
                    0.024047852,
                    3
                ],
                [
                    1409080200000,
                    14.34393311,
                    3
                ],
                [
                    1409039580000,
                    4.883850098,
                    3
                ],
                [
                    1408977480000,
                    5.520019531,
                    3
                ],
                [
                    1408977360000,
                    0.00793457,
                    3
                ],
                [
                    1408974300000,
                    2.695922852,
                    3
                ],
                [
                    1408968480000,
                    0.011962891,
                    3
                ],
                [
                    1408965720000,
                    0.427978516,
                    3
                ],
                [
                    1408965660000,
                    0.011962891,
                    3
                ]
            ]
        ]
    ]

这是我尝试过的:

import pandas as pd
json_file = pd.read_json("QueryExportTest2.json")
json_file.to_csv()

这是我的输出:

,tags\n0,"u\'name\': u\'ACDTestData\', u\'results\': [u\'values\': [[1409154300000L, 1.16003418, 3], [1409154240000L, 0.024047852, 3], [1409153280000L, 10.25598145, 3], [1409152200000L, 10.73193359, 3], [1409151240000L, 0.024047852, 3], [1409080200000L, 14.34393311, 3], [1409039580000L, 4.883850098, 3], [1408977480000L, 5.520019531, 3], [1408977360000L, 0.00793457, 3], [1408974300000L, 2.695922852, 3], [1408968480000L, 0.011962891000000002, 3], [1408965720000L, 0.42797851600000003, 3], [1408965660000L, 0.011962891000000002, 3]], u\'groups\': [u\'type\': u\'number\', u\'name\': u\'type\']]"\n

这是不对的,因为当我将它放入一个新的 Excel CSV 文档而不是仅仅打印它时,CSV 都在一个单元格中。

如果有帮助,当我尝试这个时:

import json

with open('QueryExportTest2.json') as json_data:
d = json.load(json_data)
print(d)

我明白了:

u'tags': [u'name': u'ACDTestData', u'results': [u'values': [[1409154300000L, 1.16003418, 3], [1409154240000L, 0.024047852, 3], [1409153280000L, 10.25598145, 3], [1409152200000L, 10.73193359, 3], [1409151240000L, 0.024047852, 3], [1409080200000L, 14.34393311, 3], [1409039580000L, 4.883850098, 3], [1408977480000L, 5.520019531, 3], [1408977360000L, 0.00793457, 3], [1408974300000L, 2.695922852, 3], [1408968480000L, 0.011962891, 3], [1408965720000L, 0.427978516, 3], [1408965660000L, 0.011962891, 3]], u'groups': [u'type': u'number', u'name': u'type']]]

如何将这个嵌套的 JSON 正确转换为 CSV?

【问题讨论】:

【参考方案1】:

您的 json 是一个嵌套的字典(带有列表和其他字典)。我猜你对jsonvalues 部分感兴趣。如果我的假设是正确的,因为这是一个单条目 json,请尝试以下操作

df = pd.DataFrame.from_dict(json_str['tags'][0]['results'][0]['values'])
df.columns = ['var1','var2', 'var3']
df.to_csv(filename)

如果您将拥有更多记录,则必须遍历值列表,即您可以附加它们。

all_results = json['tags'][0]['results']
for i in range(0, len(all_results))
    if i == 0:
        my_df = pd.DataFrame(all_results[i]['values'])
    else:
        my_df.append(pd.DataFrame(all_results[i]['values']))

【讨论】:

感谢您的意见。然而,当我尝试这个时,我收到一条错误消息“KeyError:'values'。我假设这意味着这个键不在字典中 - 我将如何添加它?(我是使用 Python 的新手) 我的答案的第二部分有错字,现在它已更新,可能是导致错误的原因。嗯..如果您发布的 json 出现该错误,您应该以不正确的方式访问该密钥,因为我能够从我的角度做到这一点。如果它是一个新的 json,添加到字典的方式是 my_dict['values'] = np.array([[1,2,3],[4,5,6]]) 例如。在这里添加特定值【参考方案2】:

你到底想得到什么?这里的问题是您的 json 是嵌套的,例如,如果您尝试执行以下操作:

pandas.DataFrame.from_dict(jour_json['tags'])

您将获得包含两列的数据框 - 名称和结果。

【讨论】:

我想要一个 CSV,其中包含由“值”组成的三列,例如第一条记录:第 1 列:1409154300000、第 2 列:1.16003418 和第 3 列:3。

以上是关于使用 Pandas 库将 JSON 转换为 CSV的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pandas 将 CSV 转换为 JSON

使用 python pandas 将 json 转换为 csv

如何自动将csv转换为pandas?

在 Python 3.9 中使用 Pandas 将 Excel 转换为 JSON

将 csv 转换为 JSON,并在文档顶部添加注释 (Node.js)

python - 如何将csv转换为python pandas中的嵌套json?