我有一个名为 data
的 DataFrame,其中包含一些列。其中之一是已婚
,另一个是性别
。这两个变量都是分类变量。
>>> print(data[['Gender', 'Married']].dtypes)
Gender category
Married category
dtype: object
Married
不包含 NaN
值,但 Gender
包含 12 个 NaN
值,这是我想要的归因。
>>> print(data['Gender'].isna().sum())
12
我进行了快速分析,如果您Married='Yes'
,那么您Gender='Male'
的可能性就更大。所以我想以这种方式估算Gender
值:
Married='Yes' -> Gender='Male'
Married='No' -> Gender='Female'
所以我创建了一本字典:
dictionary = {'Yes': 'Male', 'No': 'Female'}
然后我根据fillna()
编写了一个简单的代码:
data['Gender'].fillna(data['Married'].map(dictionary), inplace=True)
它的工作原理......以与预期完全不同的方式。它改变了整个Gender
列!现在每个条目都基于 Married
列。查看这些交叉表:
在 fillna() 之前:
Married No Yes
Gender
Female 80 31
Male 129 352
fillna()之后:
Married No Yes
Gender
Female 212 0
Male 0 392
如何根据 Married
列填充 NaN Gender
值?
最佳答案
你的代码看起来不错。如果不起作用,则可能存在 Pandas 错误。您可以尝试使用 bool 索引进行 loc
赋值:
mask = df['Gender'].isnull()
df.loc[mask, 'Gender'] = df.loc[mask, 'Married'].map(dictionary)
关于python - fillna() 和 map(dict) 不仅填充 NaN,还填充所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54365286/