我正在使用具有这样的嵌套对象的JSON文件。 数据分为列和行。
列数据应位于单独的列中,并且在row对象中,其内部的数字应与相应的列相关联,例如:
到目前为止,我还无法将文件转换为这种格式,我该怎么做呢?
{
"aggs": [
{
"cols": [
"depth",
"page_count"
],
"rows": [
[
1,
1
],
[
2,
661
],
[
3,
16773
],
[
4,
7078
],
[
5,
221
]
]
}
]
}
最终产品应如下所示:
depth | page_count
-----:|----------:
1 | 1
2 | 661
3 | 16773
4 | 7078
5 | 221
答案 0 :(得分:1)
这些json格式最终被嵌套为字典,所以我这样处理:
import pandas as pd
import os
x = {
"aggs": [
{
"cols": [
"depth",
"page_count"
],
"rows": [
[
1,
1
],
[
2,
661
],
[
3,
16773
],
[
4,
7078
],
[
5,
221
]
]
}
]
}
dfrows = []
dfcolumns = []
for y,z in x.items(): # x.items() is a nested dict with aggs is outer key x and z is list as the value of aggs:
for a in z: # a accesses the inner dict in the list
for j,k in a.items(): # key, value of rows and cols in inner dict
if j == 'rows':
dfrows.append(k) # make list of list of row values
if j == 'cols':
dfcolumns.append(k) # make list of list of column names
rows_flat_list = [item for x in dfrows for item in x] # flatten out list
columns_flat_list = [item for x in dfcolumns for item in x] # flatten out list
dfJson = pd.DataFrame(data = rows_flat_list, columns= columns_flat_list) # create df
dfJson.to_csv('./dfJson.csv', index=False) # write to csv
输出csv文件看起来像(或者如果您使用excel打开,则它是excelfile格式):
depth,page_count
1,1
2,661
3,16773
4,7078
5,221
答案 1 :(得分:1)
据我所知pandas.read_json
无法处理这种格式的数据,因此您必须首先使用json.loads
(或文件中的json.load
)读取它。
import pandas as pd
import json
data = """{"aggs": [{"rows": [[1, 1], [2, 661], [3, 16773], [4, 7078],
[5, 221]], "cols": ["depth", "page_count"]}]}"""
main_data = json.loads(data)["aggs"][0]
df = pd.DataFrame(columns=main_data['cols'], data=main_data['rows'])
df.to_csv("my_file.csv")
答案 2 :(得分:0)
此示例采用第一个aggs
值,并将其转换为csv
import pandas as pd
import json
data = json.loads(json_text)['aggs'][0]
pd.DataFrame(data['rows'], columns = data['cols']).to_csv('output.csv')
如果您希望每个aggs
有一个以上的表,则只需循环json_text