熊猫:映射到新列,不包括一些代码

ale*_*e19 5 python pandas

我有一个键和值的字典。我想“映射”数据框列中的数字,其中原始列是键,新列是值。

但是,字典中包含的任何值都应编码为 999。

原始数据框:

     Col1
0    02
1    03
2    02
3    02
4    04
5    88
6    77
Run Code Online (Sandbox Code Playgroud)

字典:

codes = {'01':'05',
         '02':'06',
         '03':'07',
         '04':'08'}
Run Code Online (Sandbox Code Playgroud)

预期输出:

>>> df['ColNew'] = df['Col1'].map(codes)

     ColNew
0    06
1    07
2    06
3    06
4    08
5    999
6    999
Run Code Online (Sandbox Code Playgroud)

除了首先在字典中包含 999 代码之外,我不知道该怎么做。当涉及一百多个代码并且其中只有少数需要是 999 以外的任何代码时,这令人沮丧。

piR*_*red 6

使用map并允许您在不存在的情况下传递默认值。dict.get
dict.getkey

df['ColNew'] = df['Col1'].map(lambda x: codes.get(x, 999))

df

  Col1 ColNew
0   02     06
1   03     07
2   02     06
3   02     06
4   04     08
5   88    999
6   77    999
Run Code Online (Sandbox Code Playgroud)

这也将保留dtypes. 在这种情况下,这并不重要,因为该dtype列的 是object

不过,如果是的话int,回来时map就会变成这样。通过使用默认值,我们可以避免类型转换。floatNaN