जाँच करें कि क्या कोई मान पांडा डेटाफ़्रेम इंडेक्स में मौजूद है


139

मुझे यकीन है कि ऐसा करने का एक स्पष्ट तरीका है, लेकिन अभी कुछ भी नहीं सोचना है।

मूल रूप से अपवाद को बढ़ाने के बजाय मैं यह देखना Trueया Falseदेखना चाहूंगा कि क्या पंडों के dfसूचकांक में कोई मूल्य मौजूद है ।

import pandas as pd
df = pd.DataFrame({'test':[1,2,3,4]}, index=['a','b','c','d'])
df.loc['g']  # (should give False)

मेरे पास अभी जो काम है वह निम्नलिखित है

sum(df.index == 'g')

1
किसी के बारे में क्या (df.index == 'g')?
'18

जवाबों:


252

यह काम कर जाना चाहिए

'g' in df.index

7
जब कई प्रविष्टियाँ समान सूचकांक मान साझा करती हैं तो यह काम नहीं करता है।
मैक्सिमग

2
@MaximG तुम्हारा क्या मतलब है? यह एक गैर-अद्वितीय सूचकांक के लिए भी काम करता है।
जॉरिस

मल्टी इंडेक्स के लिए भी काम करें। यदि आपके सूचकांक की लंबाई है n, तो किसी भी लम्बाई के एक टपल की 1..nजाँच की जा सकती है
मिन्ह ट्राईट

2
यहां आने वाले अन्य लोगों के लिए, आपको उपयोग करने की आवश्यकता हो सकती है 'g' in df.columnsयदि आपकी डेटाफ्रेम को एक इंडेक्स के बजाय कॉलम हेडिंग के साथ परिभाषित किया गया है, जैसे:df = pandas.DataFrame({'test':[1,2,3,4]}, columns=['a','b','c','d'])
ताहलोर

2
क्या यह निरंतर समय या रैखिक है?
लोकेश

36

बस संदर्भ के लिए जैसा कि यह कुछ था जिसे मैं देख रहा था, आप ".values" विधि को जोड़कर मूल्यों या सूचकांक के भीतर उपस्थिति के लिए परीक्षण कर सकते हैं, जैसे।

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

मुझे लगता है कि एक सरल सूची या ndarray बाहर बनाने के लिए ".values" को जोड़ना मौजूद है या "चेक" अन्य पायथन टूल के साथ अधिक सुचारू रूप से चलता है। बस मैंने सोचा कि मैं वहाँ लोगों के लिए टॉस करूँगा।


लेकिन गुण: 'DataFrame' ऑब्जेक्ट में कोई विशेषता 'फ़ील्ड' नहीं है
Gank

1
हाय गंक। "फ़ील्ड" आपको यह दिखाने के लिए चाहिए था कि आप ".values" पद्धति को डेटाफ़्रेम के विभिन्न क्षेत्रों जैसे कॉलम या चयनित कॉलम पर लागू कर सकते हैं। ".index" एक वास्तविक फ़ील्ड के साथ "फ़ील्ड" को प्रतिस्थापित करने का एक उदाहरण है जो उपलब्ध है :) मुझे लगता है कि यह स्पष्ट हो सकता है ...
ईजेकील क्रूगलिक

2
यह वास्तव में इंगित करने के लिए सहायक था। मेरे पास एक पदानुक्रमित मामला है जहां in g in df.indexसही और in g in df.index.valuesगलत का उत्पादन होता है । दिलचस्प।
watsonic

@watsonic - एक सावधानी बिंदु यह देखने के लिए है कि क्या उनमें से एक पदानुक्रम के कारण ट्यूपल लौट रहा है। यह देखने के लिए सुनिश्चित करें कि दोनों क्या डाल रहे हैं (जैसे ipython या कमांड लाइन में) यह सुनिश्चित करने के लिए कि आप क्या तुलना कर रहे हैं। एक और चीज़ जो आप पदानुक्रमित इंडेक्स के साथ कर सकते हैं वह है df.index.get_level_values ​​(<स्तर का नाम>) चीजों को अधिक समझने योग्य बनाने के लिए - बेशक आपके आवेदन के आधार पर।
यहेजकेल क्रुगलिक

28

मल्टी इंडेक्स सिंगल इंडेक्स से थोड़ा अलग काम करता है। यहां बहु-अनुक्रमित डेटाफ़्रेम के लिए कुछ तरीके दिए गए हैं।

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 एकल सूचकांक मूल्य की जाँच करते समय केवल पहले स्तर के लिए काम करता है।

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

df.index.levelsअन्य स्तरों के लिए जाँच करें ।

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

df.indexएक सूचकांक संयोजन टपल के लिए जाँच करें ।

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

2

डेटाफ़्रेम के साथ: df_data

>>> df_data
  id   name  value
0  a  ampha      1
1  b   beta      2
2  c     ce      3

मैंने कोशिश की:

>>> getattr(df_data, 'value').isin([1]).any()
True
>>> getattr(df_data, 'value').isin(['1']).any()
True

परंतु:

>>> 1 in getattr(df_data, 'value')
True
>>> '1' in getattr(df_data, 'value')
False

इतना मज़ा: डी


isindtype के लिए जाँच नहीं करेगा। df['value'].isin([True]).any()इसे आज़माएं, यह आपको ट्रू भी देगा, क्योंकि यह मेल खाता है 1True -> 1
मोहम्मद तशीन आह

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") 

IsStop क्या है
नबिन

1

नीचे दिया गया कोड बूलियन नहीं छापता है, लेकिन इंडेक्स द्वारा डेटाफ्रेम सब्मिट करने की अनुमति देता है ... मैं समझता हूं कि यह समस्या को हल करने का सबसे कुशल तरीका नहीं है, लेकिन मैं (1) इस तरह से पढ़ता हूं और (2) आप आसानी से सब्मिट कर सकते हैं। जहाँ df1 सूचकांक df2 में मौजूद है:

df3 = df1[df1.index.isin(df2.index)]

या जहां df1 सूचकांक df2 में मौजूद नहीं है ...

df3 = df1[~df1.index.isin(df2.index)]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.