我有一个键和值的字典。我想“映射”数据框列中的数字,其中原始列是键,新列是值。
但是,字典中未包含的任何值都应编码为 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 以外的任何代码时,这令人沮丧。
使用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