我想检查数据框中分类列的唯一值的数量。 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
这里的关键是从计算浮点数的唯一值中省去计算工作,并以精简的熊猫式方式做到这一点……
谢谢!
答案 0 :(得分:2)
MCVE
12
13
14
15
您可以使用select_dtypes
的df = 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
上同时使用include
和exclude
参数,以完全匹配要包括的列。