python - fillna() 和 map(dict) 不仅填充 NaN,还填充所有值

标签 python pandas dataframe

我有一个名为 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/

相关文章:

Python/Pandas 从 DataFrames 中过滤掉唯一的行

python - 消除数据框中的重复行并保留具有特定字符串值的行

python - 在 pandas 数据框中获取特定值

python - 如何在 Python 中获取标准 HTTP header 名称列表

python - 将列从 float 转换为 int 时收到 KeyError

python - 将 pandas groupby 值转换为 numpy 数组

python - 如果除一列之外的所有列均为空,如何删除整行?

r - 如何添加缺失的年份和 0 以完成数据

python - numpy 中的优雅解决方案

python - 为什么 django 在我的 url 中附加哈希值?