获取具有对象或类别dtype的列名列表

时间:2018-12-24 09:40:06

标签: python pandas dataframe types

我的目标是获取一个列表对象:Panda.series,其中的内容是根据多个条件检索的tmp3 = datatype[datatype == 'object' | datatype == 'category'].index # extract label from Pandas.series 的标签。我尝试过:

TypeError: cannot compare a dtyped [object] array with a scalar of type [bool]

这给出了错误:tmp2 = datatype[datatype == 'object'].index # extract label from Pandas.series tmp2[0] 'assetCode' tmp1 = datatype[datatype == 'category'].index # extract label from Pandas.series tmp1[0] 'assetName'

但是,虽然不那么优雅,但我能够找到以下两个可行的解决方案:

{{1}}

如何将这两个字符串组合成列表对象?是否有比我试图实现的目标更好的方法?

1 个答案:

答案 0 :(得分:4)

设置

df

   A  B  C
0  8  4  2
1  8  8  6
2  8  5  2

datatype = df.dtypes
datatype

A      object
B    category
C       int64
dtype: object

您似乎正在尝试从某些DataFrame中选择对象和分类列(此处未显示)。要修复您的代码,请使用:

tmp3 = datatype[(datatype == 'object') | (datatype == 'category')].index.tolist()
tmp3
#  ['A', 'B']

由于按位运算符具有更高的优先级,因此在对掩码进行“或”运算之前,您需要使用括号。在那之后,索引工作正常。

要获取列表,请致电.index.tolist()


另一种解决方案是select_dtypes

df.select_dtypes(include=['object', 'category'])

   A  B
0  8  4
1  8  8
2  8  5

df.select_dtypes(include=['object', 'category']).columns
# ['A', 'B']

这避免了对中间datatype系列的需求。