在Python中从JSON文件创建DataFrame的最有效方法是什么?

时间:2018-03-12 18:06:57

标签: python json

我有一个JSON文件,我想在Python中转换为DataFrame对象。我找到了一种方法来进行转换,但遗憾的是它需要很长时间,因此我会问是否有更有效和优雅的方法来进行转换。

我使用json库打开JSON文件作为字典工作正常:

import json

with open('path/file.json') as d:
file = json.load(d)

这是一些模拟真实数据集结构的模拟数据:

dict1 = {'first_level':[{'A': 'abc',
                     'B': 123,
                     'C': [{'D' :[{'E': 'zyx'}]}]},
                    {'A': 'bcd',
                     'B': 234,
                     'C': [{'D' :[{'E': 'yxw'}]}]},
                    {'A': 'cde',
                     'B': 345},
                    {'A': 'def',
                     'B': 456,
                     'C': [{'D' :[{'E': 'xwv'}]}]}]}

然后我创建一个空的DataFrame并使用for循环将我感兴趣的数据附加到它:

df = pd.DataFrame(columns = ['A', 'B', 'C'])

for i in range(len(dict1['first_level'])):
try:
    data = {'A': dict1['first_level'][i]['A'],
            'B': dict1['first_level'][i]['B'],
            'C': dict1['first_level'][i]['C'][0]['D'][0]['E']}
    df = df.append(data, ignore_index = True)
except KeyError:
    data = {'A': dict1['first_level'][i]['A'],
            'B': dict1['first_level'][i]['B']}
    df = df.append(data, ignore_index = True)

有没有办法更有效地从JSON中获取数据,还是可以更优雅地编写for循环?

(遍历数据集(~150k元素)需要一个多小时。我使用的是Python 3.6.3 64位)

1 个答案:

答案 0 :(得分:0)

您可以使用https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_json.html

或使用Spark& PySpark很容易转换为数据帧&以这种方式管理您的数据,但这可能超出您的需要。