将多个列转换为Pandas中的类别。应用?

时间:2015-06-22 23:26:22

标签: python pandas

考虑使用Dataframe。我想将一组列to_convert转换为类别。

我当然可以做到以下几点:

for col in to_convert:
  df[col] = df[col].astype('category')

但我很惊讶以下内容没有返回数据帧:

df[to_convert].apply(lambda x: x.astype('category'), axis=0)

当然这使得以下内容无效:

df[to_convert] = df[to_convert].apply(lambda x: x.astype('category'), axis=0)

为什么applyaxis=0)会返回一个系列,即使它应该逐个对列进行操作?

2 个答案:

答案 0 :(得分:7)

这只是在master中修复,因此将在0.17.0中修复,请参阅问题here

In [7]: df = DataFrame({'A' : list('aabbcd'), 'B' : list('ffghhe')})

In [8]: df
Out[8]: 
   A  B
0  a  f
1  a  f
2  b  g
3  b  h
4  c  h
5  d  e

In [9]: df.dtypes
Out[9]: 
A    object
B    object
dtype: object

In [10]: df.apply(lambda x: x.astype('category'))       
Out[10]: 
   A  B
0  a  f
1  a  f
2  b  g
3  b  h
4  c  h
5  d  e

In [11]: df.apply(lambda x: x.astype('category')).dtypes
Out[11]: 
A    category
B    category
dtype: object

答案 1 :(得分:3)

请注意,since pandas 0.23.0不再apply将多列转换为分类数据类型。现在,您可以简单地执行df[to_convert].astype('category')