【问题标题】:null value after binning分箱后的空值
【发布时间】:2020-11-07 01:28:44
【问题描述】:

在使用 pd.cut() 将连续变量转换为分类变量时,空值出现在“age”列中,该列由没有任何空值的“age_in_years”转换而成。这里的解决方案是什么?

df['age_in_years']=df['age_in_days']/365
df.drop('age_in_days',inplace=True,axis=1)
bins=[0,35,60,100]
group=['young','middle_aged','senior']
df['age']=pd.cut(df['age_in_years'],bins,labels=group,right=True).astype('object')

现在当我运行df.isnull().sum() 时,年龄列显示空值 image o/p of df.isnull().sum()

数据集:https://drive.google.com/file/d/11_qSL5tI1epiRcOzueYaMT-1GUiwAQvs/view?usp=sharing

【问题讨论】:

  • 您能否提供您的数据框df 的样本,以便重现该问题?尤其是出现问题的行,这可能是由于它们的age_in_years 超出范围 [0, 100]
  • 感谢某些年龄超出范围(0,100)

标签: python pandas dataframe data-science


【解决方案1】:

您的错误发生是因为您的五行 age_in_years 大于 100,并且由于您确定最后一个 bin 以 100 结束,因此在构造 age 时,这五行将获得空值。

您可以使用 float('inf') 作为最后一个 bin 的上限来调整您的代码:

bins = [0, 35, 60, float('inf')]
group = ['young', 'middle_aged', 'senior']
df['age'] = pd.cut(df['age_in_years'], bins, labels=group, right=False).astype('object')

【讨论】:

    【解决方案2】:

    你可以试试:

    bins=[-np.inf,0,35,60,100,np.inf]
    df['age']=pd.cut(df['age_in_years'],bins,labels=group,right=True).astype('object')
    

    这将诊断问题,还包括低于 0 (-inf, 0.0] 和高于 100 [100.0, inf) 的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-25
      • 2013-11-07
      • 2013-06-08
      • 2013-07-30
      • 1970-01-01
      • 2017-09-09
      • 2020-12-05
      • 1970-01-01
      相关资源
      最近更新 更多