拆分DataFrame JSON列触发SyntaxError报错的排查与解决
你的代码里final = df('column_config').reset_index(drop=True)这一行用了圆括号访问DataFrame列,正确写法应该是方括号df['column_config'],这是触发SyntaxError的直接原因。另外原代码逻辑也有问题:column_config里的内容是包含多个字典的列表,强行用dict(eval(x))转成单个字典会报错,根本无法得到目标结果。
正确实现步骤
- 安全解析JSON格式字符串:用
ast.literal_eval替代eval(避免执行恶意代码的风险),将字符串转为Python列表对象:
import pandas as pd import ast # 示例DataFrame df = pd.DataFrame({ 'company_id': [1, 2], 'column_config': [ '[{"username":"Rob","type":"Admin","Id":"f3234ds","prefixType":""},{"username":"Lew","type":"Finance","Id":"d32423d","prefix":"Mr"}]', '[{"username":"Bob","type":"Admin","Id":"t43234s","prefixType":""}]' ] }) # 解析字符串为Python列表 df['column_config'] = df['column_config'].apply(ast.literal_eval)
- 展开列表行:将每个列表中的字典单独拆分为一行,保留对应的
company_id:
df_exploded = df.explode('column_config', ignore_index=True)
- 拆分字典列为多列:用
pd.json_normalize将字典列展开为普通列,再与原company_id列合并:
result = pd.concat([df_exploded[['company_id']], pd.json_normalize(df_exploded['column_config'])], axis=1)
- 整理结果:删除不需要的
prefixType列,空值填充为空字符串:
result = result.drop(columns=['prefixType']).fillna('')
最终得到的result即为期望输出:
company_id username type Id prefix 0 1 Rob Admin f3234ds 1 1 Lew Finance d32423d Mr 2 2 Bob Admin t43234s
内容的提问来源于stack exchange,提问作者JackJack
相关产品推荐
相关产品推荐

