pandas Series性质的变量的NaN值填充

如果要保持 ypandas Series 性质,同时进行 NaN 处理,而不转换成 NumPy 数组,以下方法可行:


方法 1:直接使用 fillna() 处理缺失值

pandas Series 支持 fillna(),不需要 reshape()

y = y.fillna(y.mode()[0])  # 用众数填充 NaN

这样 y 仍然是 pandas.Series,不会影响后续代码运行。


方法 2:使用 astype() 确保数据类型

如果 y 可能有 NaN,你可以转换成合适的类型:

y = y.fillna(y.mode()[0]).astype(int)  # 如果是分类变量,转成整数

y = y.fillna(y.mean()).astype(float)  # 如果是数值变量,转成浮点数

这样 y 还是 pandas Series,但不会再有 NaN


方法 3:用 apply() 处理

如果你想保留 Series 但仍要修改数据:

y = y.apply(lambda v: y.mode()[0] if pd.isna(v) else v)

这样不会影响 Series 的结构。


方法 4:确保 sklearn 能接受 Series

有些 sklearn 方法默认需要 NumPy 数组,但 Series 也能兼容:

from sklearn.impute import SimpleImputer

imputer = SimpleImputer(strategy='most_frequent')

# 保持 Series 结构
y[:] = imputer.fit_transform(y.to_frame()).ravel()

这里 y.to_frame()Series 转成 DataFrame,fit_transform() 处理后再赋值回去,y 仍然是 Series


总结

  • 推荐方法 1fillna() (最简单,适用于一般情况)
  • 方法 2astype() (确保数据类型正确)
  • 方法 3apply() (适用于复杂处理)
  • 方法 4:用 sklearn 处理 (适用于机器学习任务)

这样 y 仍然是 pandas.Series,不会影响后面代码的运行! 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值