Pandas判断字符串含指定子串时字符串'nan'未被转为np.nan问题
问题原因与修复方案
核心问题
- 匹配逻辑缺陷:原代码用
xx in str(r)做包含匹配,一方面会误把包含-或nan的正常内容(比如nano、1-3折)转为缺失值,另一方面没有做大小写、空白的兼容处理,无法匹配NaN、NAN、nan这类变体的字符串nan,这就是你没有成功替换目标值的核心原因。 - 类型兼容问题:如果目标列是字符串类型,就算你写入了np.nan,部分pandas操作场景下可能会被自动转回字符串
nan,建议清理完成后统一转成数值类型。
修复代码
import numpy as np import pandas as pd # 自定义清理逻辑 def clean_val(raw): s = str(raw).strip().lower() if s in ('-', 'nan'): return np.nan return s.replace(',', '') # 应用到目标列 target_cols = ['sale_price','mrp', 'discount', 'ratings', 'stars'] df[target_cols] = df[target_cols].applymap(clean_val) # 可选:统一转为数值类型,进一步保证缺失值格式正确 df[target_cols] = df[target_cols].apply(pd.to_numeric, errors='coerce')
内容的提问来源于stack exchange,提问作者AmanArora
相关产品推荐
相关产品推荐

