使用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') - 检查并处理原列缺失值
先确认原列是否有缺失:
填充缺失值后再运行qcut,比如用中位数填充:print(df['TotalPrice'].isna().sum())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ü
相关产品推荐
相关产品推荐

