在python中将json转换为数据帧

在python中将json转换为数据帧,python,json,python-3.x,pandas,dataframe,Python,Json,Python 3.x,Pandas,Dataframe,我有一个json文件(下面的示例)。我正在尝试使用python从中创建一个数据帧: JSON: 当我试图将其转换为数据帧时: 我的代码: import json file = 'mysample.json' with open(file) as train_file: dict_train = json.load(train_file) # converting json dataset from dictionary to dataframe train = pd.DataFrame

我有一个json文件(下面的示例)。我正在尝试使用python从中创建一个数据帧: JSON:

当我试图将其转换为数据帧时:

我的代码:

import json
file = 'mysample.json'
with open(file) as train_file:
    dict_train = json.load(train_file)

# converting json dataset from dictionary to dataframe
train = pd.DataFrame.from_dict(dict_train, orient='index')
train.reset_index(level=0, inplace=True)
输出:

    index      A                                                   B
0   data    [{'CREATION_DATE': '1482105600', 'SOURCE_COUNT...   [{'CREATION_DATE': '1487808000', 'SOURCE_COUNT...
相反,我希望将其转换为如下所示的数据帧:

system  CREATION_DATE   SOURCE_COUNT
A        1482105600        0
A        1482105600        0
B        1487808000        1048
B        1487894400        1103

如何修改我的代码以获得预期的输出?

以下是纯python的答案(注意:在python 3.5或更低版本中,将
dict
替换为
collections.OrderedDict

pd.DataFrame(dict_train['data']).stack().apply(pd.Series).reset_index(level=0, drop=True).sort_index()


  CREATION_DATE SOURCE_COUNT
A    1482105600            0
A    1482105600            0
B    1487808000         1048
B    1487894400         1103
输出:

  CREATION_DATE SOURCE_COUNT system
0    1482105600            0      A
1    1482105600            0      A
2    1487808000         1048      B
3    1487894400         1103      B

以下是纯python中的一个答案(注意:在python 3.5或更低版本中,将
dict
替换为
collections.orderedict

输出:

  CREATION_DATE SOURCE_COUNT system
0    1482105600            0      A
1    1482105600            0      A
2    1487808000         1048      B
3    1487894400         1103      B
此代码有效(但不使用json):

给出:

此代码有效(但不使用json):

给出:


我不会说谎,这个答案比我的更干净更有效。我会接受的,同意!最好的方法肯定不会说谎,这个答案比我的更干净、更有效。我会接受的,同意!最好的确定方法也许最好参考@filippo答案,这是最好(最干净)的方法!也许最好参考@filippo答案,这是最好(最干净)的方法!
  CREATION_DATE SOURCE_COUNT system
0    1482105600            0      A
1    1482105600            0      A
2    1487808000         1048      B
3    1487894400         1103      B
import pandas as pd

current_dict = {"data": {
        "A": [{
                "CREATION_DATE": "1482105600",
                "SOURCE_COUNT": "0"
            },
            {
                "CREATION_DATE": "1482105600",
                "SOURCE_COUNT": "0"
            } ],
         "B": [{
                "CREATION_DATE": "1487808000",
                "SOURCE_COUNT": "1048"
                },
                {
                "CREATION_DATE": "1487894400",
                "SOURCE_COUNT": "1103"
                 } ]
         }
 }


my_list=[]

#iterate over your data: system
for system in current_dict["data"]:

    #iterate over data: system > sub-system
    for sub_system in current_dict["data"][system]:

        creation_date = int(sub_system["CREATION_DATE"])
        source_count = int(sub_system["SOURCE_COUNT"])

        #add to list
        my_list.append([system,creation_date,source_count])

#convert to panda df (adding colums name)   
df = pd.DataFrame(my_list,columns=("system","creation_date","source_count"))

print df
  system  creation_date  source_count
0      A     1482105600             0
1      A     1482105600             0
2      B     1487808000          1048
3      B     1487894400          1103