如何生成新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
相关产品推荐
相关产品推荐

