2016-05-22 31 views
1

オブジェクトにPython Pandas DataFrame列のリストがあります。私は、名前を変更せずにそれらを「カテゴリ」タイプに変換する最も簡潔な(最短の)コードを探しています。現在、私はこれを一つずつ行うことができます:DataFrameオブジェクトの列のリストを、名前を付けてカテゴリに変更します。

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

この短いコードで列のリストを取得しています。これは、文字列「var_」を含むすべての列である

list(df[[x for x in list(df) if 'var_' in x]]) 

ありがとう - マルコス

答えて

1

を私はあなたが最初にboolean indexing、その後applyastypeですべての列containsvar_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

関連する問題