pandas将JSON对象列拆分为独立列 解决json_normalize报错问题
报错原因
调用json_normalize时出现"str" has no attribute values报错,是因为当前DataFrame的details列存储的是JSON格式的字符串,而非Python字典对象。json_normalize仅支持接收字典、列表类型的结构化数据做展开,直接传入字符串就会触发该错误。
实现方法
按以下三步处理即可得到目标格式:
- 先将
details列的JSON字符串解析为字典类型 - 对解析后的字典列做扁平化展开,统一给展开后的列添加
details.前缀 - 丢弃原表的
details列,和展开后的新列按行拼接,得到最终结果
代码示例
import pandas as pd import json # 构造和你场景一致的测试DataFrame df = pd.DataFrame({ "asOfDate": ["2022-06-06"], "name": ["Vasanth"], "details": ['{"degree":"BE", "score":72.0, "subject" :"ECE"}'] }) # 解析details列的JSON字符串为字典后做扁平化 details_expand = pd.json_normalize(df["details"].apply(json.loads)) # 为展开后的列添加统一前缀 details_expand.columns = [f"details.{col}" for col in details_expand.columns] # 拼接得到最终结果 final_df = pd.concat([df.drop("details", axis=1), details_expand], axis=1)
执行后final_df的输出和你要求的目标格式完全一致:
asOfDate name details.degree details.score details.subject 0 2022-06-06 Vasanth BE 72.0 ECE
如果读取CSV后
details列存在多余空格、转义符异常,先对该列做简单的字符串清洗再执行json.loads即可,不影响后续展开逻辑。
内容的提问来源于stack exchange,提问作者Vasanth
相关产品推荐
相关产品推荐

