熊猫地图创造价值NaN

时间:2018-09-08 15:17:56

标签: python pandas dictionary nan

我正在尝试映射我要更改的值。 当我像这样>> df [column] .map(dictionary)应用“ map”时,不在词典中的值将转换为NaN。我认为原因是该系列中没有匹配的值,对吗?如果是这样,什么也不用,而是转换为NaN?我该如何使用df.map()而不是df.replace()解决此问题?

df1 = pd.Series(['a','b','c','d'])
df
0    a
1    b
2    c
3    d
dtype: object

mapping = {'a' : 0, 'b' : 1, 'c' : 2}
df1.map(mapping)
0    0.0
1    1.0
2    2.0
3    NaN
dtype: float64

df1 = pd.Series(['a','b','c','d'])
df
0    a
1    b
2    c
3    d
dtype: object

mapping = {'k' : 0, 'e' : 1, 'f' : 2}
df1.map(mapping)

0   NaN
1   NaN
2   NaN
3   NaN
dtype: float64

3 个答案:

答案 0 :(得分:2)

如果您坚持map而不是通过可通话对象

df.map(lambda x: mapping.get(x,x))

答案 1 :(得分:1)

要更改默认值,可以添加一个函数(此处为func):

mapping = {'k' : 0, 'e' : 1, 'f' : 2}
mapping.setdefault('Default', 'write watherver you want here')
def func(x, mapping):
    try:
        tmp=mapping[x]
        return(tmp)
    except:
        return('default value')
df1.map(lambda x: func(x, mapping))

答案 2 :(得分:0)

此行为是有意的。由于无法应用mapping,因此值为NaN。 为了使用映射,您必须创建一个不会更改数据的特定值(如果您进行乘法,则为1,如果进行加法,则为0),然后将该值添加到映射中。

或者,在完成映射后,您可以将所有NaN值替换为中性值(如0.0)。

与简单地使用replace相比,这两种方法的工作量都更大。