2017-03-17 82 views
3
import pandas as pd  
df = pd.DataFrame({'a':[1,2,3,4],'b':['a','b','d','d'],'c':['v','v','g','w']}) 
print(df.apply(lambda x: x.unique().shape[0])) 

上面的代码将打印每列中唯一值的计数。我只想打印“对象”类型的列的唯一值的计数。在熊猫数据框中打印唯一值

有什么办法仅过滤“对象”列

+1

你将要检查[这里](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.select_dtypes.html) – MattR

回答

4

您可以使用select_dtypes()@JulianCienfuegos已经结合nunique()说:

In [9]: df.select_dtypes(include=['object']).apply(lambda x: x.nunique()) 
Out[9]: 
b 3 
c 3 
dtype: int64 

由于@root在注释中增加了开始大熊猫0.20.0应该尽可能使用DataFrame.nunique()

df.select_dtypes(include=['object']).nunique() 
+2

作为一个音符未来的读者,'DataFrame.nunique'将在0.20.0版本中可用,所以'apply'不需要。 – root

+0

@root,好点,谢谢!我不知道那个... – MaxU

3

使用df.dtypes

df.loc[:, df.dtypes == object].apply(pd.Series.nunique) 

b 3 
c 3 
dtype: int64