[英]How to perform operation over each dictionary in column?
如果我在數據框中有一列帶有字典:
col1
{10:24, 7:3}
{5:24, 1:2, 7:8}
{1:1}
如何為每一行執行從每個字典中提取鍵的操作? 所以我需要得到:
col1
10, 7
5, 1, 7
1
怎么做? 這個 df["col1"] = df["col1"].keys() 不起作用,我不知道為什么
DataFrame
有.keys()
來獲取自己的索引,而不是從單元格中的字典中獲取鍵。
但是您可以使用.apply()
分別在列中的每個.apply()
上運行函數。
df['col1'] = df['col1'].apply(lambda item: item.keys())
最小工作示例:
import pandas as pd
df = pd.DataFrame({'col1':[
{10:24, 7:3},
{5:24, 1:2, 7:8},
{1:1},
]})
df['col1'] = df['col1'].apply(lambda item: item.keys())
print(df)
結果(現在它有帶數字的元組):
col1
0 (10, 7)
1 (5, 1, 7)
2 (1)
順便提一句:
DataFrame
具有處理字符串.str
特殊方法,它也可以用於list
/ tuples
,其中一些甚至可以用於dictionary
它無法獲得df['col1'].str.keys()
因為string
沒有keys
但是如果您使用df['col1'].str[10]
那么您將從所有具有鍵10
字典元素中獲取
0 24.0
1 NaN
2 NaN
df["col1"]
不是字典 - 它是一個元組。 這解釋了為什么您會收到AttributeError
。 您需要遍歷數據幀列中的每一行並對其調用keys()
。
df['col1'] = [row.keys() for row in df["col1"]]
DataFrame.apply
根據文檔:
沿 DataFrame 的軸應用函數。
幸運的是,默認軸是列,而不是行。 您要查找單列,因此請讓您的應用函數檢查當前列。
df.apply(lambda c: c.keys() if c.name == "col1" else c)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.