карта панд делает значения NaN - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь отобразить свои значения, которые я хочу изменить. Когда я применяю 'map' следующим образом >> df [column] .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 голосов
/ 08 сентября 2018

Чтобы изменить значение по умолчанию, вы можете добавить функцию (здесь функция):

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))
0 голосов
/ 08 сентября 2018

Если вы настаиваете на map, вместо этого передайте вызываемый

df.map(lambda x: mapping.get(x,x))
0 голосов
/ 08 сентября 2018

Это поведение предназначено. Поскольку mapping не может быть применено, значение равно NaN. Чтобы использовать сопоставление, вы должны создать определенное значение, которое не изменит ваши данные (если вы умножите это на 1, если вы сложите, затем на 0) и добавите это значение к вашему сопоставлению.

В качестве альтернативы вы можете заменить все значения NaN после сопоставления нейтральным значением, таким как 0.0.

В любом случае гораздо больше работы, чем просто использовать replace.

...