【问题标题】:How to create a Pandas DataFrame out of the keys from this JSON file?如何使用此 JSON 文件中的键创建 Pandas DataFrame?
【发布时间】:2019-09-25 00:35:42
【问题描述】:

我有一个 csv 文件,其中包含 JSON 结构中的数据,我想用它创建一个数据框,使所有键都成为列名,值对应的行值。这是 csv 文件:

                                              events
0  {'id': 1245067280.0, 'eventId': 2, 'minute': 0
1  {'id': 1613373260.0, 'eventId': 2, 'minute': 0
2  {'id': 1560174527.0, 'eventId': 3, 'minute': 0
3  {'id': 1470954990.0, 'eventId': 4, 'minute': 0
4  {'id': 1628268979.0, 'eventId': 5, 'minute': 0

这就是我想从中创建的内容:

            id  eventId minute
0 1245067280.0  2        0
1 1613373260.0  2        0
2 1560174527.0  3        0
3 1470954990.0  4        0
4 1628268979.0  5        0

还有更多的键值对,但为了简洁起见,我只包括了三个,ideventIdminute

我已经尝试过的是df.from_records(),但这并没有改变任何东西。是否有一个 Pandas/JSON 函数可以轻松地进行这种更改,或者人们是否为此编写代码?

在发布之前,我在这里浏览了很多答案,但找不到任何具体的答案。大多数答案都是关于从 JSON 文件创建 Dictionary,然后转换为 Series

【问题讨论】:

    标签: json python-3.x pandas parsing dictionary


    【解决方案1】:

    您可以打开文件并将行转换为字典列表(解析json 字符串),然后再将所有行放入DataFrame,例如:

    import csv
    import json
    
    with open('path_to_csv', 'r') as csvfile:
        reader = csv.reader(csvfile, delimiter=' ') # Assuming values in your file are separated with a space
        next(reader) # Skip header row
        records = [json.loads(row[1]) for row in reader] # Assuming that json strings are in the second column of the csv file
    
    df = pd.DataFrame(records)
    

    【讨论】:

    • 它给了我两个错误:a) 'sep' 是一个无效的关键字 arg 和 b) 行未定义。由于列表理解似乎不起作用,我应该将行定义为什么。
    • 对不起,rows 是一个错字,意思是reader,同样sep 应该是delimiter。更新了我的答案。
    • 解决了这个问题,但这次出现 JSONDecode 错误:Expecting value: line 1 column 1(char 0) 这是什么意思?
    • 在问题中包含文件的前几行(实际内容,而不是您尝试在 pandas 中阅读后看到的内容)。最有可能的是 csv 阅读器在错误的点拆分行。
    • 这里共享 csv 文件等的标准程序是什么?如果您想查看整个内容,我可以将其发送给您
    猜你喜欢
    • 1970-01-01
    • 2019-09-27
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2020-12-22
    • 1970-01-01
    • 2022-09-24
    相关资源
    最近更新 更多