如何使用Pandas计算分类特征的数量?

7

我有一个包含不同数据类型列的pd.DataFrame,我想知道每种类型的列数。我使用的是Pandas 0.24.2。

我尝试了以下代码:

    dataframe.dtypes.value_counts()

它能够很好地处理其他数据类型(float64,object,int64),但由于某种奇怪的原因,它无法聚合“category”特征,并且我对每个类别都得到不同的计数(就好像它们被视为不同的数据类型值进行计数)。

我也尝试过:

    dataframe.dtypes.groupby(by=dataframe.dtypes).agg(['count'])

但这引发了一个问题

类型错误:数据类型不被理解。

可重现的示例:

import pandas as pd

df = pd.DataFrame([['A','a',1,10], ['B','b',2,20], ['C','c',3,30]], columns = ['col_1','col_2','col_3','col_4'])

df['col_1'] = df['col_1'].astype('category')
df['col_2'] = df['col_2'].astype('category')

print(df.dtypes.value_counts())

预期结果:

    int64       2
    category    2
    dtype: int64

实际结果:

    int64       2
    category    1
    category    1
    dtype: int64

1
看起来像是一个bug :(,value_counts() 对于除了 category 之外的每种数据类型都完美地工作。 - Mohamed Thasin ah
@MohamedThasinah 你的版本是多少?我用0.19.2可以运行。 - U13-Forward
1
@MohamedThasinah 噢,0.25.0 的 bug。 - U13-Forward
2个回答

5
使用 DataFrame.get_dtype_counts 函数:
print (df.get_dtype_counts())
category    2
int64       2
dtype: int64

如果使用最新版本的pandas,推荐采用以下解决方案:

自版本0.25.0起已弃用。

改用`.dtypes.value_counts()`。


5

正如@jezrael所提到的,在0.25.0中已经不建议使用,dtypes.value_counts(0)将会给出两个 category,因此需要进行修复:

print(df.dtypes.astype(str).value_counts())

输出:

int64       2
category    2
dtype: int64

1
这很奇怪,有什么想法吗? - anky
@anky_91 谁知道呢? - U13-Forward
1
@anky_91 我发现了一个 Github 上的 Pandas Bug:https://github.com/pandas-dev/pandas/issues/8559 - U13-Forward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接