Pandas 替换熊猫中的名称时忽略NaN值
我试图替换数据集中某列上的某些值 *(注意NaN条目的存在) 列:Pandas 替换熊猫中的名称时忽略NaN值,pandas,replace,nan,Pandas,Replace,Nan,我试图替换数据集中某列上的某些值 *(注意NaN条目的存在) 列:名称 值: OLIVER HARRY OLIVER NaN HARRY NaN User1 User2 User1 User0 User2 User0 User1 User2 User1 NaN User2 NaN 通过执行以下操作: df['Name'] = 'User' + pd.Series(pd.factorize(df['Name'])[0] + 1).astype(str) 我得到了我想要的东西: 值: O
名称
值:
OLIVER
HARRY
OLIVER
NaN
HARRY
NaN
User1
User2
User1
User0
User2
User0
User1
User2
User1
NaN
User2
NaN
通过执行以下操作:
df['Name'] = 'User' + pd.Series(pd.factorize(df['Name'])[0] + 1).astype(str)
我得到了我想要的东西:
值:
OLIVER
HARRY
OLIVER
NaN
HARRY
NaN
User1
User2
User1
User0
User2
User0
User1
User2
User1
NaN
User2
NaN
问题是我需要我的NaN值保持为NaN。处理过程应忽略NaN列值,并将其保持不变,如下所示:
值:
OLIVER
HARRY
OLIVER
NaN
HARRY
NaN
User1
User2
User1
User0
User2
User0
User1
User2
User1
NaN
User2
NaN
怎么做呢?怎么样
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
,则使用数组中的值作为第三个参数。如何
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
,而数组中的值则作为第三个参数给出。另一种方法是从Name
列中创建一个dict并映射它:
names = {n:"User{}".format(i) for i, n in enumerate(df["Name"].unique())}
df["Name"] = df["Name"].map(names)
另一种方法是从
名称
列创建一个dict并映射它:
names = {n:"User{}".format(i) for i, n in enumerate(df["Name"].unique())}
df["Name"] = df["Name"].map(names)
@mortysporty,谢谢分享好的解决方案,请在这里添加解释。@mortysporty,谢谢分享好的解决方案,请在这里添加解释。