我在 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。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/392639.html
