映射为新值已全部更改为NaN

问题描述 投票:1回答:1

最初,我有一个数据框df1,其中包含一个性别列,其值是Female和Male。由于我想使用临时数据框,因此我首先复制了它。参见代码:

df2 = df1
gMap = {'Female': 1, 'Male': 0}
df2['sex']=df2['sex'].map(gMap)

发生了2个问题:

  • 性别列中的所有值均已更改为NaN
  • 即使运行df1.head,我也会看到值NaN而不是原始性别

最后一个问题是,如何将列数据类型以及上面的映射更改为整数。

python pandas
1个回答
2
投票

为了避免引用原始DataFrame,必须首先为DataFrame新建一个C0,因此更改df1将避免更改df2。

如果没有匹配可能的问题是尾随空格,请通过DataFrame.copy删除它们:

DataFrame.copy

这也会改变数据类型吗?

取决于。

如果列中的所有唯一值都是Series.str.stripSeries.str.strip(字典中的键),则创建新的整数列:

df2 = df1.copy()

print (df2['sex'].unique())

gMap = {'Female': 1, 'Male': 0}
df2['sex']=df2['sex'].str.strip().map(gMap)

如果有更多值,请获取浮点列,因为不匹配的值将返回缺少的值:

Female
© www.soinside.com 2019 - 2024. All rights reserved.