pandas - 在 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
如何才能做到这一点?
解决方案
怎么样
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
,则使用作为第三个参数的数组中的值。
推荐阅读
- c# - Visual Studio 2017 代码编译,但 nuget 包带有红色下划线
- python - 如何每月将 avg 函数应用于 DataFrame 系列?
- ffmpeg - 转码后最后一个hls段发现无效数据
- scala - 在 Spark Scala 中运行 SVD
- java - Naming.unbind("somename") 对 wildfly 13 失败
- visual-studio-2017 - 自定义 Visual Studio 2017 工具栏 - 打开特定文件
- c++ - 带有 bool 和 const char 的 c++ 函数重载会在没有警告的情况下产生歧义 (MSVC2012)
- javascript - 使用自定义附加地址信息层避开指定区域
- c# - 正则表达式匹配括号外的文本
- html - 为 flexbox 的最后一列设置样式