2015-03-23 17 views
6

Sto usando il seguente per selezionare colonne specifiche dal pettine dataframe, che vorrei portare in un nuovo dataframe. L'individuo sceglie di lavorare bene EG: comb.ix [:, 0: 1], ma quando provo a combinarli usando il + ottengo un cattivo risultato la prima selezione ([:, 0: 1]) che rimane bloccata alla fine del dataframe e i valori contenuti nel col 1 originale vengono cancellati mentre appaiono alla fine della riga. Qual è il modo giusto per ottenere solo le colonne che voglio? (Mi piacerebbe includere i dati di esempio, ma come si può vedere, troppe colonne ... è per questo che sto cercando di fare in questo modo)Panda che selezionano colonne discontinue da un dataframe

comb.ix[:,0:1]+comb.ix[:,17:342] 
+0

Stai cercando di aggiungerli colonna-saggio ? prova 'pd.concat ([comb.ix [:, 0: 1], comb.ix [:, 17: 342]], axis = 1)' – EdChum

+0

Bingo, fallo e rispondi, grazie per la rapida risposta! – dartdog

+0

Questo potrebbe essere un po 'carino, ma potrebbe anche fare qualcosa del tipo: '' 'comb.ix [:, [0] + range (17.343)]' '' – JohnE

risposta

6

Se si desidera concatenare una selezione sub del vostro df colonne quindi utilizzare pd.concat:

pd.concat([comb.ix[:,0:1],comb.ix[:,17:342]], axis=1) 

finché gli indici corrispondono allora questo sarà allineare correttamente.

Grazie a @iHightower che si può anche sub-select facendo passare le etichette:

pd.concat([df.ix[:,'Col1':'Col5'],df.ix[:,'Col9':'Col15']],a‌​xis=1) 

Nota che .ix diventerà obsoleto in una versione futura del seguente dovrebbe funzionare:

In [115]: 
df = pd.DataFrame(columns=['col' + str(x) for x in range(10)]) 
df 

Out[115]: 
Empty DataFrame 
Columns: [col0, col1, col2, col3, col4, col5, col6, col7, col8, col9] 
Index: [] 

In [118]: 
pd.concat([df.loc[:, 'col2':'col4'], df.loc[:, 'col7':'col8']], axis=1) 
​ 
Out[118]: 
Empty DataFrame 
Columns: [col2, col3, col4, col7, col8] 
Index: [] 

Or utilizzando iloc:

In [127]: 
pd.concat([df.iloc[:, df.columns.get_loc('col2'):df.columns.get_loc('col4')], df.iloc[:, df.columns.get_loc('col7'):df.columns.get_loc('col8')]], axis=1) 

Out[127]: 
Empty DataFrame 
Columns: [col2, col3, col7] 
Index: [] 

Note th a iloc affettare è aperta/chiusa così la gamma finale non è incluso in modo che avrebbe dovuto trovare la colonna dopo la colonna di interesse se si desidera includere esso:

In [128]: 
pd.concat([df.iloc[:, df.columns.get_loc('col2'):df.columns.get_loc('col4')+1], df.iloc[:, df.columns.get_loc('col7'):df.columns.get_loc('col8')+1]], axis=1) 

Out[128]: 
Empty DataFrame 
Columns: [col2, col3, col4, col7, col8] 
Index: [] 
+0

puoi anche usare etichette con .ix come questo .. ad es. pd.concat ([df.ix [:, 'Col1': 'Col5'], df.ix [:, 'Col9': 'Col15']], asse = 1) – ihightower

+1

@ihightower ringrazia per il suggerimento, I ' Ho aggiornato la risposta per mostrare come ottenere ciò usando 'loc' e' iloc' come '.ix' sarà deprecato in futuro – EdChum

Problemi correlati