Игнорировать значения NaN при замене имен в Pandas - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь ЗАМЕНИТЬ некоторые значения определенного столбца в моем наборе данных.

* ( Обратите внимание на наличие записей NaN)

Столбец : Name

Значения :

OLIVER 
HARRY 
OLIVER
NaN
HARRY
NaN

Выполнив следующее:

df['Name'] = 'User' + pd.Series(pd.factorize(df['Name'])[0] + 1).astype(str)

В основном я получаю то, что хочу:

Значения :

User1
User2
User1
User0
User2
User0

Проблема в том, что мне нужно, чтобы мои значения NaN оставались как NaN .Обработка должна игнорировать значения NaN столбца и оставить их как таковые, получая что-то вроде:

Значения :

User1
User2
User1
NaN
User2
NaN

Как это может бытьсделано?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Альтернативой является создание дикта из вашего столбца Name и его отображение:

names = {n:"User{}".format(i) for i, n in enumerate(df["Name"].unique())}
df["Name"] = df["Name"].map(names)
0 голосов
/ 02 марта 2019

Как насчет

import numpy as np

df['Name'] = np.where(df['Name'].isna(), df['Name'],'User' + pd.Series(pd.factorize(df['Name'])[0] + 1).astype(str))

Это не заменит nan -вступы, а просто оставит их как есть.

В основном функция where принимает массив логических значений, в данном случае df['Name'].isna(), и использует значения из массива, заданного в качестве второго аргумента, где это значение равно True, и значения из массиваиначе в качестве третьего аргумента.

...