【发布时间】:2021-04-10 18:09:25
【问题描述】:
我在 DataFrame 中有一个包含 JSON 字符串的列,每个字符串代表一个字典列表:
id Number Type Class Name datiles
0 292 C 1 2 A [{"did":{"id":"3","num":1},"NId":"a1,b1,c1","Att":null,"isnull":false,"number":"M90","label":[{"title":"Dear","Info":{"Id":null,"id2":2,"Name":"x"}},{"title":"Dear","Info":{"Id":null,"id2":2,"Name":"x"}}],"codes":[],"rule":null}]
1 293 C 1 2 A [{"did":{"id":"3","num":1},"NId":"a1,b1,c1","Att":null,"isnull":false,"number":"M90","label":[{"title":"Dear","Info":{"Id":null,"id2":2,"Name":"x"}},{"title":"Dear","Info":{"Id":null,"id2":2,"Name":"x"}}],"codes":[],"rule":null}]
我想将 datiles 列中的每一行转换为行和列,并将它们与原始数据框连接起来,如下面的示例所示:
id Number Type Class Name did NId Att ..... .... label ........
0292 C 1 2 A {"id":"3","num":1} a1,b1,c1 null [{"title":"Dear","Info"{"Id":null,"id2":2,"Name":"x"}},{"title":"Dear","Info":{"Id":null,"id2":2,"Name":"x"}}]
我已根据需要完成此操作,但我不知道如何将其与原始数据框连接起来,因为它们之间没有密钥:
df['datiles']=data['datiles'].apply(json.loads)
df2 = pd.DataFrame([])
for x in df['datiles'].values.tolist():
df2 = df2 .append(pd.DataFrame(x))
display(df2)
如何拆分列并同时加入? 我曾尝试使用 json_normalize 但出现此错误
AttributeError: 'list' object has no attribute 'values'
另外,我也看过那些帖子,但没有用,可能是因为列表结构
How to convert python JSON rows to dataframe columns without looping
Pandas split column of lists into multiple columns
How to split a list of dictionaries into multiple columns keeping the same index?
【问题讨论】:
-
第一个数据帧的副本中有错别字。
"Info"{"Id":null,...不是dict也不是有效的 JSON。那列datiles真的包含dicts 吗?我对此表示怀疑,在我看来更像 JSON 字符串(以拼写错误为模)。