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

使用pandas.qcut处理TotalPrice列时返回NaN值的问题

pandas qcut生成NaN的常见原因及解决办法

常见原因

  • 重复值占比过高:qcut按分位数均分数据,如果某一数值的数量超过了分位区间应有的样本量,系统没法划分出有效分箱,就会返回NaN。比如要分4箱,但某个值占了一半以上的数据,后面的分位数区间没法分配,就会出现空值。
  • 原列存在缺失值:哪怕改了数据类型,如果TotalPrice本身有NaN,qcut处理时会直接保留这些空值到新列里。
  • 分箱数超过唯一值数量:比如TotalPrice只有3个不同值,但你要分5箱,自然没法生成对应分箱,出现NaN。

解决办法

  • 调整分箱数或处理重复分位数
    减少分箱数量,比如把q=10改成q=5试试;或者用duplicates参数自动丢弃重复分位数:
    df['new_column'] = pd.qcut(df['TotalPrice'], q=4, duplicates='drop')
    
  • 检查并处理原列缺失值
    先确认原列是否有缺失:
    print(df['TotalPrice'].isna().sum())
    
    填充缺失值后再运行qcut,比如用中位数填充:
    df['TotalPrice'] = df['TotalPrice'].fillna(df['TotalPrice'].median())
    df['new_column'] = pd.qcut(df['TotalPrice'], q=4)
    
  • 手动指定分位数边界
    如果自动分箱不行,手动计算并设置分位数:
    # 计算唯一的分位数
    quantiles = df['TotalPrice'].quantile([0, 0.25, 0.5, 0.75, 1.0]).unique()
    df['new_column'] = pd.qcut(df['TotalPrice'], q=quantiles)
    
    或者改用等宽分箱的pd.cut(如果业务允许的话):
    df['new_column'] = pd.cut(df['TotalPrice'], bins=4)
    

内容的提问来源于stack exchange,提问作者Kadir Can Üzümcü

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:20:29