2014-05-08 39 views
50

'da bir değer olup olmadığını kontrol edin Bunu yapmak için açık bir yol olduğundan eminim, ancak şu anda kaygan bir şey düşünemiyorum.pandas dataframe index

Temel olarak, yükseltme istisnası yerine df panda'larında bir değer olup olmadığını görmek için True veya False almak istiyorum.

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

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

Şimdi ne çalışma var o benim aradığım şeydi gibi bu sadece başvuru için hile

'g' in df.index 
+1

Herhangi bir şey hakkında (df.index == 'g')? – luffe

cevap

101

takip için test edebilirsiniz olduğu ".values" yöntemini ekleyerek, değerler veya indeks içindeki varlığı, örn.

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

ben "Değerler," ekleyerek basit bir listesini almak veya yapar dışarı ndarray için bulmak yok veya çekler daha sorunsuz diğer piton araçlarıyla çalışacak 'in'. Sadece bunu insanlar için dışarı atabileceğimi düşündüm.

+2

Birden çok girdi aynı dizin değerlerini paylaştığında bu işe yaramaz. – MaximG

+0

@MaximG Ne demek istiyorsun? Bu, benzersiz olmayan bir dizin için de çalışır. – joris

+0

Ayrıca çoklu endeks için de çalışıyoruz. Endeksiniz 'n' uzunluğuna sahipse, 1..n''den herhangi bir uzunlukta bir tuple –

21

yapmalıyım

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

kontrol edilebilir ancak AttributeError: 'DataFrame' nesnesinin 'field' – Gank

+1

Hi Gank özniteliği yoktur. "Alan" ın, ".values" yöntemini, sütunlar veya seçilen sütun gibi veri çerçevesinin çeşitli alanlarına uygulayabileceğini göstermesi gerekiyordu. ".index", "alan" ı, mevcut olan gerçek bir alanla değiştirmenin bir örneğidir :) Daha açık olabilir sanırım ... –

+1

Bu, işaret etmekte gerçekten yardımcı oldu. Df.index'de g "true" ve "df.index.values" ifadesinde g ifadesi bulunan bir hiyerarşik durumum var. İlginç. – 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

Çoklu dizin, tek bir dizinden biraz farklı çalışır. Çok endeksli veri çerçevesi için bazı yöntemler. Tek endeks değerini kontrol sadece ilk seviye için

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 çalışır.

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

Diğer düzeyler için df.index.levels denetleyin. Bir dizin kombinasyonu demet için df.index yılında

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

kontrol edin.

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

Bence .tolist() 'gereklidir ... –

+0

@JaeyoungChun, siz haklısınız. Cevabı ben düzenledim. Teşekkürler. – broccoli2000