Pandas nunique()仅用于分类列,否则为null?

时间:2019-05-16 17:34:09

标签: python pandas categorical-data

我想检查数据框中分类列的唯一值的数量。 df.nunique()给我所有列的唯一值,这需要很长时间。为了使其更快,我想跳过数字列中的任何内容。但是,我仍然希望输出是包含所有列的完整系列,只对数字列使用Null(并且不计算这些列)。

我一直在玩df._get_numeric_data(),集合和df.unquniue(),但还没有达到我想要的输出。

所以输入

col_name type
col1    object
col2    object
col3    float64
col4    float64
col5    float64
col6    object
col7    float64
col8    object
col9    object

所需的输出:

col_name    nunqiue
col1    23
col2    3
col3    null
col4    null
col5    null
col6    4
col7    null
col8    6
col9    2

这里的关键是从计算浮点数的唯一值中省去计算工作,并以精简的熊猫式方式做到这一点……

谢谢!

1 个答案:

答案 0 :(得分:2)

MCVE

12
13
14
15

您可以使用select_dtypesdf = pd.DataFrame( np.random.randint(1, 100, (100, 9)), columns=[f'col{i}' for i in range(1, 10)]) df[['col1', 'col2', 'col6', 'col8', 'col9']] = \ df[['col1', 'col2', 'col6', 'col8', 'col9']].astype(object) >>> df.dtypes col1 object col2 object col3 int32 col4 int32 col5 int32 col6 object col7 int32 col8 object col9 object dtype: object 参数从计算中排除所有数字列。

exclude

df.select_dtypes(exclude='number').nunique().reindex(df.columns)

您可以在col1 62.0 col2 63.0 col3 NaN col4 NaN col5 NaN col6 63.0 col7 NaN col8 65.0 col9 61.0 dtype: float64 上同时使用includeexclude参数,以完全匹配要包括的列。