我的目标是获取一个列表对象: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}}
如何将这两个字符串组合成列表对象?是否有比我试图实现的目标更好的方法?
答案 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
系列的需求。