[英]Convert Pandas dataframe to nested JSON (without nesting as lists)
我知道這個主題還有其他主題,但我遇到了一個似乎沒有其他答案可以解決的問題。
給定以下 Pandas 數據框:
a b c d
a1 b1 c1 d1
a2 b2 c2 d2
我想創建一個具有以下結構的嵌套 JSON 對象:
[
{
"a": "a1",
"b": "b1",
"nested_group":
{
"c": "c1",
"d": "d1"
}
},
{
"a": "a2",
"b": "b2",
"nested_group":
{
"c": "c2",
"d": "d2"
}
}
]
我在其他線程中找到的解決方案是使用以下代碼:
j = (df.groupby(['a','b'])
.apply(lambda x: x[['c','d']].to_dict('records'))
.reset_index()
.rename(columns={0:'nested_group'})
.to_json(orient='records'))
但是,我遇到的問題是上面的代碼將每個nested_group
對象放在方括號內,如下所示:
"nested_group": [
{
"c": "c2",
"d": "d2"
}
]
我試圖生成的對象旨在作為 API 調用的有效負載,不幸的是,每個內部字典周圍的方括號會導致 API 返回錯誤。 (對象頂部/底部的最外面的括號很好。)如何讓 Python 不將內部字典視為列表?
重現示例數據框的代碼:
import numpy as np
import pandas as pd
array = np.array([['a1', 'b1', 'c1', 'd1'], ['a2', 'b2', 'c2', 'd2']])
df = pd.DataFrame(data=array, columns=['a','b','c','d'])
先感謝您 :)
讓我們試試
out = [{'a':x['a'],'b':x['b'],'nested_group':x[['c','d']].to_dict()} for _,x in df.iterrows() ]
Out[284]:
[{'a': 'a1', 'b': 'b1', 'nested_group': {'c': 'c1', 'd': 'd1'}},
{'a': 'a2', 'b': 'b2', 'nested_group': {'c': 'c2', 'd': 'd2'}}]
查看to_dict
的文檔,似乎我們仍然必須使用records
選項,如果我們假設它始終是1
個元素的列表,只需使用原始代碼獲取第0
個元素
>>> import numpy as np
>>> import pandas as pd
>>> array = np.array([['a1', 'b1', 'c1', 'd1'], ['a2', 'b2', 'c2', 'd2']])
>>> df = pd.DataFrame(data=array, columns=['a','b','c','d'])
>>> (df.groupby(['a','b'])
.apply(lambda x: x[['c','d']].to_dict('records')[0])
.reset_index()
.rename(columns={0:'nested_group'})
.to_json(orient='records'))
'[{"a":"a1","b":"b1","nested_group":{"c":"c1","d":"d1"}},{"a":"a2","b":"b2","nested_group":{"c":"c2","d":"d2"}}]'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.