python - 在 Python 中用 NaN 替换数值
问题描述
我想用 NaN 替换 DataFrame 列中的所有数值
输入
A B C
test foo xyz
hit bar 10
hit fish 90
hit NaN abc
test val 20
test val 90
期望的输出:
A B C
test foo xyz
hit bar NaN
hit fish NaN
hit NaN abc
test val NaN
test val NaN
我尝试了以下方法:
db_old.loc[db_old['Current Value'].istype(float), db_old['Current Value']] = np.nan
但返回:
AttributeError:“系列”对象没有属性“istype”
有什么建议么?
谢谢
解决方案
您可以使用以下方法屏蔽数值to_numeric
:
df['C'] = df['C'].mask(pd.to_numeric(df['C'], errors='coerce').notna())
df
A B C
0 test foo xyz
1 hit bar NaN
2 hit fish NaN
3 hit NaN abc
4 test val NaN
5 test val NaN
to_numeric
是最通用的解决方案,无论您是否有一列字符串或混合对象,都应该有效。
如果它是一列字符串并且您只是想保留字符串,str.isalpha
可能就足够了:
df['C'] = df['C'].where(df['C'].str.isalpha())
df
A B C
0 test foo xyz
1 hit bar NaN
2 hit fish NaN
3 hit NaN abc
4 test val NaN
5 test val NaN
尽管这专门保留了没有数字的字符串。
如果你有一列混合对象,这里是另一个使用str.match
(任何带有na
标志的 str 方法,真的)的解决方案na=False
:
df['C'] = ['xyz', 10, 90, 'abc', 20, 90]
df['C'] = df['C'].where(df['C'].str.match(r'\D+$', na=False))
df
A B C
0 test foo xyz
1 hit bar NaN
2 hit fish NaN
3 hit NaN abc
4 test val NaN
5 test val NaN
推荐阅读
- python - Google Cloud Function 访问 Google Drive CSV 文件
- html - 如何将离子输入文本与侧面的其他元素对齐
- node.js - 节点立即被杀死 - MacOS
- node.js - 为 NodeJS 自定义 Swagger UI 选项卡标题和图标
- python-3.x - 识别排序正则表达式的正确方法 [variableName].add(
- r - 在 R 中使用 ifelse 条件时先前的标记无效
- c# - 我有一个验证,可以阻止用户导航到下一个窗口,但是当所有字段都被清除后,转到下一个窗口
- regex - 如何使用正则表达式突出显示 SQL 关键字?
- docker - 无法在 windows 10 pro 上重新安装 docker 桌面
- flutter - Flutter 提供者如何关闭每个实例