2015-10-29 16 views

risposta

26

Per gli oggetti panda (Serie, DataFrame), l'operatore di indicizzazione [] accetta solo

  1. colname o elenco di nomi per selezionare colonna/i
  2. slicing o matrice booleana per selezionare le righe, ovvero si riferisce solo a una dimensione del dataframe.

Per df[[colname(s)]], le staffe interne sono per la lista, e le staffe esterne sono indicizzazione operatore, vale a dire è necessario utilizzare doppie parentesi se si selezionano due o più colonne. Con un nome di colonna, una coppia di parentesi restituisce una serie, mentre le parentesi doppie restituiscono un dataframe.

Inoltre, df.ix[df['A'] < 3,['A','C']] o df.loc[df['A'] < 3,['A','C']] è meglio che la selezione concatenata per evitare il ritorno di una copia contro una vista del dataframe.

Consultare pandas documentation per dettagli

+1

Grazie. Selezionerò questo perché entra nei dettagli dello scopo delle parentesi esterne, il che mi confondeva. Come hai menzionato entrambi, inizierò a utilizzare .ix che ha senso/mi sta meglio leggendo. – FortuneFaded

5

perché non hai colonne denominate 'A','C', che è quello che ci si stia tentando di fare che sollevare un KeyError, quindi bisogna utilizzare un iterabile per sub-select dal df.

Così

df[df['A'] < 3]['A','C'] 

solleva

KeyError: ('A', 'C')

Che è diverso da

In [261]: 
df[df['A'] < 3][['A','C']] 

Out[261]: 
    A C 
0 0 1 
1 2 5 

Questo non è diverso da provare:

df['A','C'] 

da qui perché è necessario doppie parentesi quadre:

df[['A','C']] 

Si noti che il moderno modo è quello di utilizzare .ix:

In [264]: 
df.ix[df['A'] < 3,['A','C']] 

Out[264]: 
    A C 
0 0 1 
1 2 5 

In modo che si opera su una visione piuttosto che potenzialmente una copia

+0

Grazie. Quando lo si inserisce nel formato .ix ha molto più senso. Sono stato buttato fuori da quello che significavano le doppie parentesi. – FortuneFaded

Problemi correlati