如何在pandas中针对含字符串的列替换指定值-99
问题原因
pandas 的 replace() 方法默认严格匹配数据类型,你之前调用的 .replace(-99, 0) 只能匹配到数值类型列的整型/浮点型 -99,而包含字符串的列中存储的是字符串形式的 '-99',二者数据类型不同,所以不会被匹配替换。
解决方案
方案1:一次性全表匹配替换
直接传入类型匹配的替换映射字典,会自动对对应类型的目标值做替换,无需单独筛选列:
# 数值类型的-99替换为0,字符串类型的'-99'替换为'unknown' df = df.replace({ -99: 0, '-99': 'unknown' })
方案2:按列类型分别处理
如果需要更精准的控制,可单独筛选对应类型的列做替换操作:
# 替换数值列的-99为0 num_cols = df.select_dtypes(include='number').columns df[num_cols] = df[num_cols].replace(-99, 0) # 替换字符串/object列的'-99'为'unknown' str_cols = df.select_dtypes(include='object').columns df[str_cols] = df[str_cols].replace('-99', 'unknown')
注意事项
如果字符串列中的'-99'存在前后空格,可先对字符串列做去空格处理再替换:
# 先对所有字符串列做去空格处理 df[str_cols] = df[str_cols].apply(lambda x: x.str.strip()) # 再执行替换操作 df = df.replace({-99:0, '-99':'unknown'})

内容的提问来源于stack exchange,提问作者George Zambrano
相关产品推荐
相关产品推荐

