[英]Convert pandas DataFrame to arbitrary nested JSON data
假設我有一個名為df
Pandas DataFrame,它看起來像:
source tables columns
src1 table1 col1
src1 table1 col2
src1 table2 col1
src2 table1 col1
src2 table1 col2
我下面的當前代碼可以遍歷源列表並將每個源中的表列表作為對象嵌套:
data = [
{k: v}
for k, v in df.groupby('source')['tables'].agg(
lambda x: {v: {} for v in x}).items()
]
with open('data.json', 'w') as f:
json.dump(data, f, indent = 2)
我使用此代碼收到的輸出如下:
[
{
"src1": {
"table1": {},
"table2": {}
}
},
{
"src2": {
"table1": {},
}
}
]
我想要的輸出:
[
{
"src1": {
"table1": {
"col1": {},
"col2": {}
},
"table2": {
"col1": {}
}
}
},
{
"src2": {
"table1": {
"col1": {}
}
}
}
]
將我的 2 層嵌套 JSON 文件轉換為 3 層(如上所示)的任何幫助將不勝感激。 先感謝您。
由於您在這里有多個級別的分組,我建議您只使用 for 循環來迭代您的數據。
from collections import defaultdict
def make_nested(df):
f = lambda: defaultdict(f)
data = f()
for row in df.to_numpy().tolist():
t = data
for r in row[:-1]:
t = t[r]
t[row[-1]] = {}
return data
print(json.dumps(make_nested(df), indent=2))
{
"src1": {
"table1": {
"col1": {},
"col2": {}
},
"table2": {
"col1": {}
}
},
"src2": {
"table1": {
"col1": {},
"col2": {}
}
}
}
這假設您的列從左到右排列:最外面的鍵到最里面的鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.