を私はあなたが最初にboolean indexing
、その後apply
astype
ですべての列contains
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 are not supported at this time