2016-05-22 1 views
1

Ich habe eine Liste von Python Pandas DataFrame-Spalten in Objekten. Ich suche den (kürzesten) sparsamsten Methodencode, um sie in "Kategorie" -Typen umzuwandeln, ohne ihre Namen zu ändern. Derzeit kann ich dies nur eins nach dem anderen tun:Ändern Sie eine Liste von DataFrame-Objektspalten in Kategorien unter Beibehaltung ihrer Namen

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

Die Liste der Spalten wird mit diesem kurzen Code erhalten. Dies ist alle Spalten, die die Zeichenfolge 'var_' enthalten

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

Danke - Markos

Antwort

1

Ich glaube, Sie zuerst alle Spalten containsvar_1 mit boolean indexing filtern und dann applyastype:

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 

Das ist schöner, aber jetzt nicht implementiert:

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

NotImplementedError: > 1 ndim Categorical are not supported at this time

Verwandte Themen