2014-05-08 4 views
50

Sono certo che c'è un modo ovvio per farlo ma non riesco a pensare a niente di buono in questo momento.Verifica se esiste un valore nell'indice pandas dataframe

Fondamentalmente invece di aumentare l'eccezione mi piacerebbe ottenere True o False per vedere se esiste un valore nell'indice panda df.

df = pandas.DataFrame({'test':[1,2,3,4]}, index=['a','b','c','d']) 

df.loc['g'] # (should give False) 

Quello che ho ora di lavoro è la seguente

sum(df.index == 'g') 
+1

Che dire di qualsiasi (df.index == 'g')? – luffe

risposta

101

Questo dovrebbe fare il trucco

'g' in df.index 
+2

Sembra non funzionare quando diverse voci condividono gli stessi valori di indice. – MaximG

+0

@MaximG Cosa intendi? Questo funziona anche per un indice non univoco. – joris

+0

Funzionano anche per più indici. Se il tuo indice ha lunghezza 'n', allora una tupla di qualsiasi lunghezza da' 1..n' può essere verificata –

21

Solo per riferimento, come era qualcosa che stavo cercando, è possibile testare per presenza all'interno dei valori o dell'indice aggiungendo il metodo ".values", ad es

g in df.<your selected field>.values 
g in df.index.values 

trovo che l'aggiunta dei ".values" per ottenere un elenco semplice o ndarray fuori marche esiste o 'in' controlli eseguiti più agevolmente con gli altri strumenti di pitone. Ho pensato di buttarlo lì fuori per le persone.

+0

ma AttributeError: l'oggetto 'DataFrame' non ha attributo 'campo' – Gank

+1

Ciao Gank. Il "campo" doveva mostrare che è possibile applicare il metodo ".values" a vari campi del dataframe come colonne o una colonna selezionata. ".index" è un esempio di sostituzione di "campo" con un campo reale che è disponibile :) Immagino che potrebbe essere più chiaro ... –

+1

Questo è stato davvero utile sottolineare. Ho un caso gerarchico in cui 'in g in df.index' produce true e' in g in df.index.values' false. Interessante. – watsonic

1
df = pandas.DataFrame({'g':[1]}, index=['isStop']) 

#df.loc['g'] 

if 'g' in df.index: 
    print("find g") 

if 'isStop' in df.index: 
    print("find a") 
9

L'indice multi funziona leggermente diverso dal singolo indice. Ecco alcuni metodi per il dataframe con più indici.

df = pd.DataFrame({'col1': ['a', 'b','c', 'd'], 'col2': ['X','X','Y', 'Y'], 'col3': [1, 2, 3, 4]}, columns=['col1', 'col2', 'col3']) 
df = df.set_index(['col1', 'col2']) 

in df.index lavori per il primo livello di controllo solo quando valore dell'indice singolo.

'a' in df.index  # True 
'X' in df.index  # False 

Controllare df.index.levels per altri livelli.

'a' in df.index.levels[0] # True 
'X' in df.index.levels[1] # True 

Arrivo df.index per una tupla combinazione di indice.

('a', 'X') in df.index # True 
('a', 'Y') in df.index # False 
+1

Non penso che '.tolist()' sia necessario ... –

+0

@JaeyoungChun, hai ragione. Ho modificato la risposta. Grazie. – broccoli2000