Python 将DataFrame转换为任意嵌套的JSON数据
假设我有一个名为Python 将DataFrame转换为任意嵌套的JSON数据,python,json,pandas,dataframe,object,Python,Json,Pandas,Dataframe,Object,假设我有一个名为df的熊猫数据帧,它看起来像: source tables columns src1 table1 col1 src1 table1 col2 src1 table2 col1 src2 table1 col1 src2 table1 col2 下面我的当前代码可以遍历源列表,并将每个源中的表列表嵌套为对象: d
df
的熊猫数据帧,它看起来像:
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
这假设您的列是从左到右排列的:最外面的键到最里面的键。请欣赏。我也只需要在前3列中使用它,因为我在DataFrame中还有其他列。您能否编辑您的答案,以便仅对前3列进行分组?Thanks@weovibewvoibweoivwoiv将df[[col1,col2,col3]]传递给函数,该函数应该可以完成。发布了另一个后续问题,希望您能帮助回答,谢谢。
print(json.dumps(make_nested(df), indent=2))
{
"src1": {
"table1": {
"col1": {},
"col2": {}
},
"table2": {
"col1": {}
}
},
"src2": {
"table1": {
"col1": {},
"col2": {}
}
}
}