拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何从资料框熊猫的一个JSON列中获取一个值

如何从资料框熊猫的一个JSON列中获取一个值

白鹭 - 2022-02-10 2120 0 0

我在 Pandas 中有以下资料框:

名称 分支 班级 细节
薇琪 全面性教育 [ {“id”: “1234”,“entityType”:{ Name:”Parent”,Type:”entity”},“name”:”Vikas”},{ “id”: “8974”, “entityType”: {Name:”Parent1”,Type:”entity1”},“name”:”Sachin”},{“id”: 5678”,“entityType”:{Name:”Parent2”,Type:”entity2” },“名称”:”Sehwag”}]

现在,第 4 列嵌套了 JSON 字符串,我试图从嵌套的 JSON 中仅获取 Name 栏位,如下所示:

名称 分支 班级 详细信息.0.名称 详细信息.1.名称 详细信息.2.名称
薇琪 全面性教育 维卡斯 萨钦 塞瓦格

有没有办法使用熊猫来做到这一点?

uj5u.com热心网友回复:

-------问题修改后更新答案-----------

知道您要为“详细信息”列中的所有物件提取名称栏位,您可以尝试以下操作:

df["Detail_Names"] = df["Details"].apply(lambda x: [o["name"] for o in x])
df2 = pd.DataFrame(df["Detail_Names"].tolist())
df.merge(df2, left_index=True, right_index=True, how="outer").drop(["Details", "Detail_Names"], axis=1)

如果您的“详细信息”列实际上包含一个 JSON 字符串,则第一行将更改为以下内容,以便首先将 JSON 字符串转换为串列:

df["Details"] = df["Details"].apply(lambda x: [o["name"] for o in json.loads(x)])

(请注意,我没有费心重命名新列。)

-----------原答案-----------------

如果您的“详细信息”列是包含 JSON 编码字符串的字符串资料型别,那么您可以使用内置的 json 库使用以下内容将第三个物件的“名称”属性提取到新系列中将每一行中的 JSON 字符串译码为一个物件:

df["Details"].apply(lambda x: json.loads(x)[2]["name"])

另一方面,如果您的列已经包含译码 json 字符串的 dict 物件,那么您可以这样做:

df["Details"].apply(lambda x: x[2]["name"])

这是一个先前的 SO 执行绪,它也可能提供一些在使用 Pandas 内置方法的 DataFrame 中使用 JSON 的替代方法,但我不确定这是否适用于 JSON 阵列 - 它可能仅适用于 JSON 物件在列/系列中。看起来这专注于将所有 JSON 元素拆分为新的列,而不是提取特定的列,但也许有一种方法可以使用它。如果是这样,使用 apply 函式可能比我上面的建议性能更高,特别是如果您有一个非常大的 DataFrame。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *