检查数据帧中哪些列是分类列

2024-03-29 15:36:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我对熊猫还不熟悉。。。我想用一种简单而通用的方法来查找哪些列是我的DataFrame中的categorical,而不是像this SO question中那样手动指定每个列类型。创建df时使用:

import pandas as pd
df = pd.read_csv("test.csv", header=None)

例如

           0         1         2         3        4
0   1.539240  0.423437 -0.687014   Chicago   Safari
1   0.815336  0.913623  1.800160    Boston   Safari
2   0.821214 -0.824839  0.483724  New York   Safari

是的。

更新(2018/02/04)问题假设数值列不是分类的,@Zero'saccepted answer solves this

小心-正如@Sagarkar的评论所指出的,这并不总是正确的。困难在于数据类型和分类/序数/名词类型是正交的概念,因此它们之间的映射并不简单。@下面Jeff的answer指定了实现手动映射的精确方式。


Tags: csv方法answerimport类型dataframedfso
3条回答

为了子孙后代。选择数据类型的规范方法是.select_dtypes。您可以指定一个实际的numpy类型或可转换类型,或不是numpy类型的“类别”。

In [1]: df = DataFrame({'A' : Series(range(3)).astype('category'), 'B' : range(3), 'C' : list('abc'), 'D' : np.random.randn(3) })

In [2]: df
Out[2]: 
   A  B  C         D
0  0  0  a  0.141296
1  1  1  b  0.939059
2  2  2  c -2.305019

In [3]: df.select_dtypes(include=['category'])
Out[3]: 
   A
0  0
1  1
2  2

In [4]: df.select_dtypes(include=['object'])
Out[4]: 
   C
0  a
1  b
2  c

In [5]: df.select_dtypes(include=['object']).dtypes
Out[5]: 
C    object
dtype: object

In [6]: df.select_dtypes(include=['category','int']).dtypes
Out[6]: 
A    category
B       int64
dtype: object

In [7]: df.select_dtypes(include=['category','int','float']).dtypes
Out[7]: 
A    category
B       int64
D     float64
dtype: object

可以使用df._get_numeric_data()获取数值列,然后查找分类列

In [66]: cols = df.columns

In [67]: num_cols = df._get_numeric_data().columns

In [68]: num_cols
Out[68]: Index([u'0', u'1', u'2'], dtype='object')

In [69]: list(set(cols) - set(num_cols))
Out[69]: ['3', '4']

我发现的方法是更新到Pandas v0.16.0,然后排除数字类型:

df.select_dtypes(exclude=["number","bool_","object_"])

如果不更改任何类型,也不向NumPy添加更多类型,那么它可以工作。在the question's comments by @Jeff中的建议是include=["category"],但这似乎不起作用。

NumPy类型:link

Numpy Types

相关问题 更多 >