在python中将json转换为数据帧
我有一个json文件(下面的示例)。我正在尝试使用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
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