如何將嵌套的 json 串列中的 json 串列轉換為以下格式?似乎無法做到這一點,許多示例使用pandaswhere 我更喜歡使用csv.DictWriter. 我的想法是(在回圈中)讀取 json - 在這種情況下data,將其轉置為水平。
{"rows": [
{
"data": [
{
"A": "1",
"B": "2"
},
{
"C": "3",
"D": "4"
},
{
"E": "5",
"F": "6"
}
]
},
...
...
...
{
"data": [
{
"A": "7",
"B": "8"
},
{
"C": "9",
"D": "10"
},
{
"E": "11",
"F": "12"
}
]
}
]
}
所需格式:
A, B, C, D, E, F
1, 2, 3, 4, 5, 6
...
7, 8, 9, 10, 11, 12
我已經閱讀了 json 已經在使用json.loads。只是堅持轉換這一點。
uj5u.com熱心網友回復:
DictWriter 使用 dict 理解生成行資料非常簡單:
import json
import csv
json_str = '''{"rows": [{"data": [{"A": "1", "B": "2"},
{"C": "3", "D": "4"},
{"E": "5", "F": "6"}]},
{"data": [{"A": "7", "B": "8"},
{"C": "9", "D": "10"},
{"E": "11", "F": "12"}]}]}'''
data = json.loads(json_str)
with open('out.csv','w',newline='') as f:
w = csv.DictWriter(f,fieldnames='ABCDEF')
w.writeheader()
for row in data['rows']:
data = {k:v for d in row['data'] for k,v in d.items()}
print(data)
w.writerow(data)
輸出(字典理解結果):
{'A': '1', 'B': '2', 'C': '3', 'D': '4', 'E': '5', 'F': '6'}
{'A': '7', 'B': '8', 'C': '9', 'D': '10', 'E': '11', 'F': '12'}
輸出.csv:
A,B,C,D,E,F
1,2,3,4,5,6
7,8,9,10,11,12
uj5u.com熱心網友回復:
你最好不要做任何花哨的事情。只需翻閱字典并將資料復制到新字典中即可。
json_input = {} # Your input JSON dictionary
transposed_data = {}
for row in json_input['rows']:
for data_dict in row['data']:
for key, value in data_dict.items():
if key not in transposed_data:
transposed_data[key] = []
transposed_data[key].append(value)
然后你可以寫出你認為合適的資料。例如:
keys = transposed_data.keys()
num_values_per_key = len(transposed_data[keys[0]])
with open('output.csv', 'w') as output_file:
output_file.write(f'{", ".join(keys)}\n')
for index in range(num_values_per_key):
values = []
for key in keys:
values.append(transposed_data[key][index])
output_file.write(f'{", ".join(values)}\n')
一些圖書館提供者也有可能是制作 CSV 的更好方法。我沒有在這里花太多時間,因為聽起來移調是主要問題。
uj5u.com熱心網友回復:
僅僅因為這是可能的方式,我也想展示串列理解方式。我通常是做事的“pythonic方式”的忠實粉絲,但是在這種情況下它確實有點混亂。
import json
import pandas as pd
json_data = '''{"rows": [
{
"data": [
{
"A": "1",
"B": "2"
},
{
"C": "3",
"D": "4"
},
{
"E": "5",
"F": "6"
}
]
},
{
"data": [
{
"A": "7",
"B": "8"
},
{
"C": "9",
"D": "10"
},
{
"E": "11",
"F": "12"
}
]
}
]
}'''
raw_data = json.loads(json_data)
cleaned_data = [{key:val for subdict in row for key,val in subdict.items()} for row in [data["data"] for data in raw_data["rows"]]]
Out[118]:
[{'A': '1', 'B': '2', 'C': '3', 'D': '4', 'E': '5', 'F': '6'},
{'A': '7', 'B': '8', 'C': '9', 'D': '10', 'E': '11', 'F': '12'}]
df = pd.DataFrame(cleaned_data)
Out[120]:
A B C D E F
0 1 2 3 4 5 6
1 7 8 9 10 11 12
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/404621.html
標籤:
