首页 > 解决方案 > 在 Pandas 中替换名称时忽略 NaN 值

问题描述

我试图在我的数据集中的某个列上替换一些值。

*(注意存在 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

如何才能做到这一点?

标签: pandasreplacenan

解决方案


怎么样

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-entries,而只是让它们保持原样。

基本上,该where函数接受一个布尔值数组,在这种情况下df['Name'].isna(),并使用作为第二个参数给出的数组中的值,只要 this 计算为True,则使用作为第三个参数的数组中的值。


推荐阅读