gpt4 book ai didi

python - 在 Python 中用 NaN 替换数值

转载 作者:太空宇宙 更新时间:2023-11-04 11:17:06 25 4
gpt4 key购买 nike

我想用 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: 'Series' object has no attribute '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 - 在 Python 中用 NaN 替换数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56776995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com