【问题标题】:Pandas - binning column of numeric values while preserving NaNPandas - 在保留 NaN 的同时对数值列进行分箱
【发布时间】:2021-01-17 09:20:23
【问题描述】:

我在数据框中有一列包含数值(例如年龄),并希望将其分成几个类别(或范围),如下所示:

df['Age_binned'] = pd.qcut(df['Age'], 5, duplicates='drop')

产生以下范围:

(-0.001, 36.0]
(36.0, 45.0]
(45.0, 54.0]
(54.0, 62.0]
(62.0, 87.0]

但是,我知道此列还包含一些 NaN 值,我想将其视为单独的 bin。我怎样才能做到这一点?

我厌倦了使用.fillna(),但是如果我用数值填充NaN,它会与上面的bin 合并,而.qcut() 方法似乎会忽略非数值。

【问题讨论】:

  • 请提供样本数据和预期输出
  • @Arun,我还能提供什么?我希望NaN 也出现在.qcut() 方法返回的范围列表中,作为一个单独的类别。

标签: pandas binning


【解决方案1】:

你可以用np.nan填充nan:

#dummy data:
df = pd.DataFrame({'age': np.random.choice(list(range(100)) + [None]*20, 100)})

pd.qcut(df['age'].fillna(np.nan), 5)


0     (64.0, 82.4]
1     (15.8, 39.0]
2              NaN
3     (39.0, 64.0]
4     (15.8, 39.0]
          ...     
95    (15.8, 39.0]
96    (15.8, 39.0]
97    (39.0, 64.0]
98    (64.0, 82.4]
99    (82.4, 98.0]
Name: age, Length: 100, dtype: category
Categories (5, interval[float64]): [(0.999, 15.8] < (15.8, 39.0] < (39.0, 64.0] < (64.0, 82.4] < (82.4, 98.0]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 2017-12-29
    • 2021-06-15
    相关资源
    最近更新 更多