将DataFrame对象列的列表更改为保持其名称的类别

时间:2016-05-22 21:41:20

标签: python-3.x pandas dataframe

我在对象中有一个Python Pandas DataFrame列的列表。我正在寻找最简约的方法(最短)代码将它们转换为'类别'类型而不更改其名称。目前,我只能逐一做到这一点:

df.var_missvent = df.var_missvent.astype('category')

列表列表由此简短代码获得。这是包含字符串' var _'

的所有列
list(df[[x for x in list(df) if 'var_' in x]])

谢谢 - 马科斯

1 个答案:

答案 0 :(得分:1)

我认为您可以先使用contains然后boolean indexing apply过滤所有列astype var_1

import pandas as pd

df = pd.DataFrame({'var_a': [0, 4, 0, 4, 4],
                   'var_b': [5, 10, 10, 5, 5], 
                   'b': [5, 10, 10, 5, 5]})

print (df)
    b  var_a  var_b
0   5      0      5
1  10      4     10
2  10      0     10
3   5      4      5
4   5      4      5

print (df.dtypes)
b        int64
var_a    int64
var_b    int64
dtype: object

print (df.columns.str.contains('var_'))
[False  True  True]

cols = df.columns[df.columns.str.contains('var_')]
print (cols)
Index(['var_a', 'var_b'], dtype='object')

df[cols] = df[cols].apply(lambda x: x.astype('category'))

print (df.dtypes)
b           int64
var_a    category
var_b    category
dtype: object

这个更好,但现在没有实现:

df[cols] = df[cols].astype('category')
  

NotImplementedError:>目前不支持1 ndim Categorical