如何将DataFrame中含JSON对象的列拆分扩展为多列?
解决方法:将DataFrame中的JSON列拆分为多列
嗨,这个需求用pandas就能轻松搞定,我给你两种实用方案,你可以根据自己的场景选:
方法一:直接用pd.json_normalize(推荐)
如果你的JSON列已经是字典类型(不是字符串格式),直接用pd.json_normalize就能一键展开成目标列:
import pandas as pd # 模拟你的原始DataFrame df = pd.DataFrame({ 'json_col': [{'a': 'x', 'b':'y', 'c':'z'}, {'a': 'x1', 'b':'y2', 'c':'z3'}] }) # 把JSON列展开为a、b、c单独列 expanded_df = pd.json_normalize(df['json_col']) # 如果原DataFrame还有其他需要保留的列,用concat合并即可 # final_df = pd.concat([df.drop('json_col', axis=1), expanded_df], axis=1) print(expanded_df)
运行后输出就是你想要的格式:
a b c 0 x y z 1 x1 y2 z3
方法二:先转字典再展开(如果列是字符串类型)
如果你的JSON列存储的是字符串格式的JSON(比如"{'a': 'x', 'b':'y', 'c':'z'}"),需要先把字符串转成字典,再用上面的方法:
import pandas as pd import json # 模拟字符串类型的JSON列 df = pd.DataFrame({ 'json_col': ["{'a': 'x', 'b':'y', 'c':'z'}", "{'a': 'x1', 'b':'y2', 'c':'z3'}"] }) # 先将字符串转成字典(如果你的字符串用双引号,直接json.loads(x)就行) df['json_col'] = df['json_col'].apply(lambda x: json.loads(x.replace("'", '"'))) # 再展开为目标列 expanded_df = pd.json_normalize(df['json_col'])
补充小提示
pd.json_normalize会自动把字典的键作为新列名,对应的值会精准填充到每一行- 如果原表有其他需要保留的列,记得用
pd.concat把原表(去掉JSON列)和展开后的表按列合并
内容的提问来源于stack exchange,提问作者giu
相关产品推荐
相关产品推荐

