2015-06-22 15 views
5

Betrachten Sie einen Datenrahmen. Ich möchte eine Reihe von Spalten to_convert in Kategorien konvertieren.Konvertieren mehrerer Spalten in Kategorien in Pandas. sich bewerben?

Ich kann auf jeden Fall wie folgt vor:

for col in to_convert: 
    df[col] = df[col].astype('category') 

aber ich war überrascht, dass das folgende keine Datenrahmen zurück:

df[to_convert].apply(lambda x: x.astype('category'), axis=0) 

was natürlich die nicht funktionieren Fabrikate:

df[to_convert] = df[to_convert].apply(lambda x: x.astype('category'), axis=0) 

Warum ist apply (axis=0) zurück n eine Serie, obwohl sie nacheinander auf die Spalten einwirken soll?

Antwort

6

Dies wurde nur im Master festgelegt und wird so in 0.17.0 sein, finden Sie in der Ausgabe here

In [7]: df = DataFrame({'A' : list('aabbcd'), 'B' : list('ffghhe')}) 

In [8]: df 
Out[8]: 
    A B 
0 a f 
1 a f 
2 b g 
3 b h 
4 c h 
5 d e 

In [9]: df.dtypes 
Out[9]: 
A object 
B object 
dtype: object 

In [10]: df.apply(lambda x: x.astype('category'))  
Out[10]: 
    A B 
0 a f 
1 a f 
2 b g 
3 b h 
4 c h 
5 d e 

In [11]: df.apply(lambda x: x.astype('category')).dtypes 
Out[11]: 
A category 
B category 
dtype: object