我在 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 评论