You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成新DataFrame,将原始DataFrame中所有以-9开头的值替换为NaN

如何生成新DataFrame,将原始DataFrame中所有以-9开头的值替换为NaN

嘿,我来帮你搞定这个问题!你之前的代码没生效,核心原因是你的DataFrame里那些以-9开头的是数值类型(比如float/int),而你用的正则表达式是针对字符串匹配的,自然找不到目标值啦~

下面给你两种靠谱的解决方案,随便挑一种用就行:

方法1:用applymap遍历单元格判断(最直观准确)

这个方法会逐个检查每个单元格的值,先转成字符串再判断是否以-9开头,符合条件就换成pd.NA:

import pandas as pd

new_df = weatherData_original.applymap(lambda x: pd.NA if str(x).startswith('-9') else x)

比如你示例里的-9.00、-99.00、-9.0这些值,都会被正确识别并替换成NaN,而像0.31、8.62这类正常数值会保留原样。

方法2:修正正则匹配的方式(适配数值类型)

如果你坚持想用replace的正则功能,调整正则规则后也能生效,pandas会自动处理数值与字符串的匹配转换:

new_df = weatherData_original.replace(to_replace=r'^-9.*', value=pd.NA, regex=True)

这里的正则^-9.*表示匹配以-9开头的任意内容,不管后面跟的是整数、小数点还是小数位,都能精准命中目标值。

为什么你之前的代码没效果?

你之前写的regex=r'^-9\d+'只会匹配-9后面跟纯数字的情况(比如-99),但匹配不了-9.0、-9.678这类带小数点的;而regex='^[-9].*'逻辑错误,它的意思是匹配以-或者9开头的任意内容,范围太宽还会误判,再加上这些正则都是针对字符串设计的,你的数据是数值类型,所以根本匹配不到目标。

备注:内容来源于stack exchange,提问作者Ramon Mendez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:27:58