pd.json_normalize() 发生“str 对象没有属性 'values'

问题描述

我手动创建了一个数据框:

import pandas as pd
df_articles1 = pd.DataFrame({'Id'   : [4,5,8,9],'Class':[
                                        {'encourage': 1,'contacting': 1},{'cardinality': 16,'subClassOf': 3},{'get-13.5.1': 1},{'cardinality': 12,'encourage': 1}
                                    ]
                            }) 

我将其导出为 csv 文件以在拆分后导入:

df_articles1.to_csv(f"""{path}articles_split.csv""",index = False,sep=";")

我可以用 pd.json_normalize() 分割它:

df_articles1 = pd.json_normalize(df_articles1['Class'])

我将其 csv 文件导入 Panda Dataframe:

df_articles2 = pd.read_csv(f"""{path}articles_split.csv""",sep=";") 

但拆分失败并显示“AttributeError: 'str' object has no attribute 'values'”pd.json_normalize(df_articles2['Class'])

谢谢。

解决方法

那是因为当您通过 to_csv() 保存时,'Class' 列中的数据存储为 string 而不是 dictionary/json,因此在加载保存后数据:

df_articles2 = pd.read_csv(f"""{path}articles_split.csv""",sep=";") 

然后使用eval()方法和apply()方法使其恢复原始形式:-

df_articles2['Class']=df_articles2['Class'].apply(lambda x:eval(x))

最后:

resultdf=pd.json_normalize(df_articles2['Class'])

现在如果你打印 resultdf 你会得到你想要的输出