我是Pandas的新手... 当我不手动指定每个列类型时,我希望以一种简单而通用的方式查找categorical我的DataFrame列,而不是在这个SO问题中.在df与创建:
import pandas as pd
df = pd.read_csv("test.csv", header=None)
Run Code Online (Sandbox Code Playgroud)
例如
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
Run Code Online (Sandbox Code Playgroud)
.
更新(2018/02/04)这个问题假设数字列不是绝对的,@ Zero 接受的答案解决了这个问题.
小心 - 正如@Sagarkar的评论所指出的那样并非总是如此.难点在于数据类型和分类/序数/标称类型是正交概念,因此它们之间的映射并不简单.@ Jeff的答案如下指定了实现手动映射的精确方式.
Zer*_*ero 38
您可以使用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']
Run Code Online (Sandbox Code Playgroud)
pds*_*pds 17
我找到的方法是更新到Pandas v0.16.0,然后用以下数字排除数字dtypes:
df.select_dtypes(exclude=["number","bool_","object_"])
Run Code Online (Sandbox Code Playgroud)
哪个有效,不提供任何类型的更改,并且不再向NumPy添加更多类型.在建议通过@Jeff问题的意见建议include=["category"],但似乎并没有工作.
NumPy类型: 链接

Jef*_*eff 11
对于后代.选择dtypes的规范方法是.select_dtypes.您可以指定一个实际的numpy dtype或convertible,或'category',它不是numpy dtype.
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
Run Code Online (Sandbox Code Playgroud)
小智 6
# 获取分类变量和数值变量
numCols = X.select_dtypes("number").columns
catCols = X.select_dtypes("object").columns
numCols= list(set(numCols))
catCols= list(set(catCols))
Run Code Online (Sandbox Code Playgroud)
您可以使用以下代码获取分类列的列表:
dfName.select_dtypes(include=['object']).columns.tolist()
Run Code Online (Sandbox Code Playgroud)
直观地用于数字列:
dfName.select_dtypes(exclude=['object']).columns.tolist()
Run Code Online (Sandbox Code Playgroud)
希望有帮助。
如果您只关心哪些列属于什么类型,则不需要查询数据。
最快的方法(当%%timeit-ing 时)是:
df.dtypes[df.dtypes == 'category'].index
Run Code Online (Sandbox Code Playgroud)
(这会给你一个 pandas' Index。.tolist()如果你需要的话,你可以从中获取一个列表。)
这是有效的,因为df.dtypes是pd.Series字符串(它自己的 dtype 是'object'),因此您实际上可以通过正常的 pandas 查询选择所需的类型。
您的分类类型不是'category'简单字符串 ( 'object') 吗?然后只需:
df.dtypes[df.dtypes == 'object'].index
Run Code Online (Sandbox Code Playgroud)
'object'你有和的混合吗'category'?然后isin像平常一样使用来查询多个匹配项:
df.dtypes[df.dtypes.isin(['object','category'])].index
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36141 次 |
| 最近记录: |