2014-05-08 18 views
50

Jestem pewien, że jest to oczywisty sposób, ale nie mogę myśleć o niczym innym jak teraz.Sprawdź, czy istnieje wartość w indeksie pand z indeksu danych

Zasadniczo zamiast podnosić wyjątek, chciałbym uzyskać True lub False, aby sprawdzić, czy istnieje wartość w indeksie pandy df.

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

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

Co ja pracuje teraz jest następujący

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

Co z dowolnym (df.index == "g")? – luffe

Odpowiedz

101

To powinno załatwić sprawę

'g' in df.index 
+2

Wydaje się, że to nie działa, gdy kilka wpisów ma te same wartości indeksu. – MaximG

+0

@MaximG Co masz na myśli? Działa to również dla nieunikalnego indeksu. – joris

+0

Działa również dla wielu indeksu. Jeśli twój indeks ma długość 'n', wtedy krotka o dowolnej długości od' 1..n' może być sprawdzona –

21

tylko w celach informacyjnych, jak to było coś, czego szukał, można testować obecność w obrębie wartości lub indeksu przez dołączenie metody ".values", np

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

Uważam, że dodanie „.values”, aby uzyskać prostą listę lub ndarray się marek istnieje lub «w» sprawdza działać płynnie z innymi narzędziami Pythona. Pomyślałem, że rzuciłbym to tam dla ludzi.

+0

, ale AttributeError: obiekt "DataFrame" nie ma atrybutu 'pole' – Gank

+1

Cześć Gank. "Pole" miało pokazać, że można zastosować metodę ".values" do różnych pól ramek danych, takich jak kolumny lub wybrana kolumna. ".index" jest przykładem zastąpienia "pola" rzeczywistym polem, które jest dostępne :) Domyślam się, że może być jaśniejsze ... –

+1

To było naprawdę pomocne, aby wskazać. Mam hierarchiczny przypadek, w którym 'in g in df.index' daje wartość true i' in g in df.index.values' false. Ciekawy. – 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

Indeks wielu działa trochę inaczej niż pojedynczy indeks. Oto kilka metod dla wielowyszukiwanej ramki danych.

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 działa na pierwszym poziomie tylko podczas sprawdzania wartości pojedynczego indeksu.

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

Sprawdź inne poziomy na df.index.levels.

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

Przyjazd df.index dla skojarzonego indeksu krotki.

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

Nie sądzę, że '.tolist()' jest konieczne ... –

+0

@JaeyoungChun, masz rację. Zmieniłem odpowiedź. Dzięki. – broccoli2000

Powiązane problemy