2015-11-03 13 views
15

Sto provando a tracciare un set di istogrammi per un dataframe con 25 colonne denominate "Feature_1","Feature_2",...."Feature_25". Quando utilizzo df.hist() ordina i singoli istogrammi in base al loro nome in modo che vengano tracciati nel seguente ordine: "Feature_1",""Feature_10","Feature_11"..."Feature_2","Feature_20",... che non è quello che mi serve.Come modificare l'ordine dei grafici nel comando panda hist

Come si modifica l'ordinamento? Il parametro Passing Column non cambia nulla.

Ho risolto il problema utilizzando direttamente matplotlib ma non è quello che preferirei fare ogni volta che ho bisogno di tracciare diversi istogrammi.

+2

Anche se fastidioso, si potrebbe rinominare le colonne 'Feature_01',' Feature_02', ....? – Alexander

+0

Sebbene ciò risolva il problema in questo caso particolare, non risolverà il problema in generale quando abbiamo diverse colonne con nomi non ordinati. –

+11

Sfortunatamente, questo problema è hardcoded in 'pandas.DataFrame.hist' poiché [' df.hist' punta a 'pandas.tools.plotting.hist_frame'] (https://github.com/pydata/pandas/blob/master /pandas/core/frame.py#L5473). [Questa riga] (https://github.com/pydata/pandas/blob/master/pandas/tools/plotting.py#L2833) mostra che se le tue colonne sono ordinabili, le ordinerà usando vaniglia 'ordinate (colonne) '. Non sembra essere una parola chiave per modificare questo comportamento. – wflynny

risposta

1

Si potrebbe invece effettuare chiamate ripetute ad hist con colonne individuali. Non sono sicuro se questo si adatta a tutte le tue esigenze.

import pandas as pd 

df = pd.DataFrame({'a':[1,1,1,1,3], 
        'b':[1,1,2,1,3], 
        'c':[2,2,2,1,3], 
        }) 

df[['c']].hist() 
df[['a']].hist() 
df[['b']].hist() 

Basta scorrere l'elenco delle colonne nell'ordine in cui si desidera

my_list = ['c','a','b'] 
for each in my_list: 
    df[[each]].hist() 
1

provare a fare l'indice colonne categorica, poi tracciando con sort_columns veri.

import pandas as pd 

df = pd.DataFrame({'a':[1,2], 'b':[30,10]}) 
df.columns = pd.CategoricalIndex(['b', 'a'], ordered=True) 
df.plot.hist(sort_columns=True, subplots=True) 
1

È possibile ordinare le colonne in anticipo utilizzando df.reindex_axis con una chiave di ordinamento personalizzata. Quindi le colonne possono essere nell'ordine desiderato. Per esempio:

df = pd.DataFrame({'Feature_1':[1,2,3],'Feature_10':[1,2,3],'Feature_2':[2,3,4]}) 
print df 
df = df.reindex_axis(sorted(df.columns, key=lambda a: int(a.split('_')[1])), axis=1) 
print df 

Ti dà

Feature_1 Feature_10 Feature_2 
0   1   1   2 
1   2   2   3 
2   3   3   4 
    Feature_1 Feature_2 Feature_10 
0   1   2   1 
1   2   3   2 
2   3   4   3 

quindi tracciano l'istogramma

df.plot.hist(sort_columns=False, subplots=True) 
Problemi correlati