我在对象中有一个Python Pandas DataFrame列的列表。我正在寻找最简约的方法(最短)代码将它们转换为'类别'类型而不更改其名称。目前,我只能逐一做到这一点:
df.var_missvent = df.var_missvent.astype('category')
列表列表由此简短代码获得。这是包含字符串' var _'
的所有列list(df[[x for x in list(df) if 'var_' in x]])
谢谢 - 马科斯
答案 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