如何将嵌套的json结构转换为数据框

IceBurger:

我将JSON转换为DataFrame并以“ Structure_value”列结尾,该列具有以下值作为字典/词典列表:

                   Structure_value
[{'Room': 6, 'Length': 7}, {'Room': 6, 'Length': 7}]
[{'Room': 6, 'Length': 22}]
[{'Room': 6, 'Length': 8}, {'Room': 6, 'Length': 9}]

由于它是一个对象,所以我猜它最终会以这种格式出现。

我需要将其分为以下四列:

Structure_value_room_1
Structure_value_length_1
Structure_value_room_2
Structure_value_length_2

StackOverflow上的所有其他解决方案仅处理将Simple JSON转换为DataFrame而不是嵌套结构的问题。

PS:我知道我可以通过显式命名字段来做一些事情,但是我需要一个通用的解决方案,以便将来可以处理这种格式的任何JSON

[编辑]:输出应如下所示:

   Structure_value_room_1  Structure_value_length_1  Structure_value_room_2  \
0                       6                         7                     6.0   
1                       6                        22                     NaN   
2                       6                         8                     6.0   

   Structure_value_length_2  
0                       7.0  
1                       NaN  
2                       9.0  
耶斯雷尔:

将列表理解与嵌套字典理解与枚举一起使用,以将重复数据删除字典,最后一次将字典列表传递给DataFrame构造函数:

L = [ {f"{k}_{i}": v for i, y in enumerate(x, 1) 
                     for k, v in y.items()}
                     for x in df["Structure_value"] ]
df = pd.DataFrame(L)
print(df)

   Room_1  Length_1  Room_2  Length_2
0       6         7     6.0       7.0
1       6        22     NaN       NaN
2       6         8     6.0       9.0

对于问题中的列名,请使用:

def json_to_df(df, column):

    L = [ {f"{column}_{k.lower()}_{i}": v for i, y in enumerate(x, 1) 
                         for k, v in y.items()}
                         for x in df[column] ]
    return pd.DataFrame(L)


df1 = json_to_df(df, 'Structure_value')
print(df1)
   Structure_value_room_1  Structure_value_length_1  Structure_value_room_2  \
0                       6                         7                     6.0   
1                       6                        22                     NaN   
2                       6                         8                     6.0   

   Structure_value_length_2  
0                       7.0  
1                       NaN  
2                       9.0  

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章