Iloc, ix और loc कैसे भिन्न हैं?


635

क्या कोई समझा सकता है कि इन तीन तरीकों को अलग-अलग कैसे किया जाए?
मैंने डॉक्स देखा है , और मैंने इन उत्तरों को देखा है , लेकिन मैं अभी भी खुद को यह समझाने में असमर्थ हूं कि तीनों अलग कैसे हैं। मेरे लिए, वे बड़े हिस्से में विनिमेय लगते हैं, क्योंकि वे टुकड़ा करने की क्रिया के निचले स्तर पर हैं।

उदाहरण के लिए, मान लें कि हम पहली पाँच पंक्तियाँ प्राप्त करना चाहते हैं DataFrame। यह कैसे है कि ये तीनों काम करते हैं?

df.loc[:5]
df.ix[:5]
df.iloc[:5]

क्या कोई ऐसे तीन मामले प्रस्तुत कर सकता है जहां उपयोग में अंतर स्पष्ट हो?


7
SettingWithCopyWarning परिदृश्यों का उल्लेख करना बहुत महत्वपूर्ण है: stackoverflow.com/questions/20625582/… और stackoverflow.com/questions/23688307/…
पॉल

9
ध्यान दें कि ix को अब
पदावनति के

जवाबों:


968

नोट: पांडा संस्करण 0.20.0 और इसके बाद के संस्करण में, ixहै पदावनत और के उपयोग locऔर ilocबजाय प्रोत्साहित किया जाता है। मैंने इस उत्तर के कुछ हिस्सों को छोड़ दिया है जो वर्णन करते हैंix पंडों के पुराने संस्करणों के उपयोगकर्ताओं के लिए एक संदर्भ के रूप में अक्षुण्ण । उदाहरणों को दिखाने के लिए नीचे दिए गए उदाहरण जोड़े गए हैं ix


सबसे पहले, यहाँ तीन तरीकों का एक पुनर्कथन है:

  • locसूचकांक से विशेष लेबल वाली पंक्तियाँ (या स्तंभ) प्राप्त होती हैं।
  • ilocसूचकांक में विशेष पदों पर पंक्तियों (या स्तंभों) को प्राप्त करता है (इसलिए यह केवल पूर्णांक लेता है)।
  • ixआमतौर पर व्यवहार करने की कोशिश करता है, locलेकिन वापस व्यवहार करने के लिए गिरता है जैसे ilocकि एक लेबल सूचकांक में मौजूद नहीं है।

कुछ सूक्ष्मताओं पर ध्यान देना महत्वपूर्ण है जो ixउपयोग करने के लिए थोड़ा मुश्किल बना सकते हैं:

  • यदि सूचकांक पूर्णांक प्रकार का है, ixतो केवल लेबल-आधारित अनुक्रमण का उपयोग करेगा और स्थिति-आधारित अनुक्रमणिका पर वापस नहीं आएगा। यदि लेबल इंडेक्स में नहीं है, तो एक त्रुटि उठाई जाती है।

  • यदि अनुक्रमणिका में केवल पूर्णांक नहीं होते हैं, तो पूर्णांक दिया जाता है, ixतुरंत लेबल-आधारित अनुक्रमण के बजाय स्थिति-आधारित अनुक्रमण का उपयोग करेगा। यदि फिर ixभी एक अन्य प्रकार (जैसे एक स्ट्रिंग) दिया जाता है, तो यह लेबल-आधारित अनुक्रमण का उपयोग कर सकता है।


तीन तरीकों के बीच के अंतर को समझने के लिए, निम्नलिखित श्रृंखला पर विचार करें:

>>> s = pd.Series(np.nan, index=[49,48,47,46,45, 1, 2, 3, 4, 5])
>>> s
49   NaN
48   NaN
47   NaN
46   NaN
45   NaN
1    NaN
2    NaN
3    NaN
4    NaN
5    NaN

हम पूर्णांक मान से स्लाइसिंग देखेंगे 3

इस स्थिति में, s.iloc[:3]हमें पहली 3 पंक्तियाँ लौटाता है (क्योंकि यह एक स्थिति के रूप में 3 व्यवहार करता है) और s.loc[:3]हमें पहली 8 पंक्तियाँ देता है (क्योंकि यह 3 को एक लेबल के रूप में मानता है):

>>> s.iloc[:3] # slice the first three rows
49   NaN
48   NaN
47   NaN

>>> s.loc[:3] # slice up to and including label 3
49   NaN
48   NaN
47   NaN
46   NaN
45   NaN
1    NaN
2    NaN
3    NaN

>>> s.ix[:3] # the integer is in the index so s.ix[:3] works like loc
49   NaN
48   NaN
47   NaN
46   NaN
45   NaN
1    NaN
2    NaN
3    NaN

सूचना s.ix[:3]उसी श्रृंखला को लौटाती है, s.loc[:3]क्योंकि वह स्थिति पर काम करने के बजाय पहले लेबल के लिए देखती है (और sपूर्णांक प्रकार का सूचकांक )।

क्या होगा यदि हम एक पूर्णांक लेबल के साथ प्रयास करें जो सूचकांक में नहीं है (कहते हैं 6)?

यहाँ s.iloc[:6]श्रृंखला के पहले 6 पंक्तियों को उम्मीद के मुताबिक लौटाता है। हालाँकि, s.loc[:6]KeyError उठाता है क्योंकि 6इंडेक्स में नहीं है।

>>> s.iloc[:6]
49   NaN
48   NaN
47   NaN
46   NaN
45   NaN
1    NaN

>>> s.loc[:6]
KeyError: 6

>>> s.ix[:6]
KeyError: 6

उपर्युक्त सूक्ष्मताओं के अनुसार, s.ix[:6]अब एक KeyError उठाता है क्योंकि यह काम करने की कोशिश करता है locलेकिन 6सूचकांक में नहीं मिल सकता है । क्योंकि हमारा सूचकांक पूर्णांक प्रकार का हैix होता है, जैसे व्यवहार करने से पीछे नहीं हटतेiloc

यदि, हालांकि, हमारा सूचकांक मिश्रित प्रकार का था, तो पूर्णांक दिए जाने पर KeyError बढ़ाने के बजाय तुरंत ixव्यवहार करेंगे iloc:

>>> s2 = pd.Series(np.nan, index=['a','b','c','d','e', 1, 2, 3, 4, 5])
>>> s2.index.is_mixed() # index is mix of different types
True
>>> s2.ix[:6] # now behaves like iloc given integer
a   NaN
b   NaN
c   NaN
d   NaN
e   NaN
1   NaN

ध्यान रखें कि ixअभी भी गैर-पूर्णांक स्वीकार कर सकते हैं और व्यवहार कर सकते हैं loc:

>>> s2.ix[:'c'] # behaves like loc given non-integer
a   NaN
b   NaN
c   NaN

सामान्य सलाह के रूप में, यदि आप केवल लेबल का उपयोग कर अनुक्रमण कर रहे हैं, या केवल पूर्णांक स्थितियों का उपयोग कर अनुक्रमण कर रहे हैं, तो अनपेक्षित परिणामों से बचने के लिए छड़ी locया ilocउपयोग न करें ix


स्थिति-आधारित और लेबल-आधारित अनुक्रमण का संयोजन

कभी-कभी एक DataFrame दिया जाता है, आप पंक्तियों और स्तंभों के लिए लेबल और स्थितीय अनुक्रमण विधियों का मिश्रण करना चाहेंगे।

उदाहरण के लिए, निम्नलिखित DataFrame पर विचार करें। कैसे सबसे अच्छा करने के लिए और सहित 'सी' पंक्तियों काट करने के लिए और पहले चार स्तंभों ले?

>>> df = pd.DataFrame(np.nan, 
                      index=list('abcde'),
                      columns=['x','y','z', 8, 9])
>>> df
    x   y   z   8   9
a NaN NaN NaN NaN NaN
b NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN
d NaN NaN NaN NaN NaN
e NaN NaN NaN NaN NaN

पांडा के पुराने संस्करणों में (0.20.0 से पहले) ixआपको यह बड़े करीने से करने देता है - हम पंक्तियों को लेबल द्वारा स्तंभ कर सकते हैं और स्थिति के आधार पर कॉलम (ध्यान दें कि कॉलम के लिए, ixस्थिति-आधारित स्लाइसिंग के लिए डिफ़ॉल्ट होगा क्योंकि 4स्तंभ नाम नहीं है ):

>>> df.ix[:'c', :4]
    x   y   z   8
a NaN NaN NaN NaN
b NaN NaN NaN NaN
c NaN NaN NaN NaN

पांडा के बाद के संस्करणों में, हम इस परिणाम का उपयोग कर ilocऔर एक अन्य विधि की मदद से प्राप्त कर सकते हैं :

>>> df.iloc[:df.index.get_loc('c') + 1, :4]
    x   y   z   8
a NaN NaN NaN NaN
b NaN NaN NaN NaN
c NaN NaN NaN NaN

get_loc()एक सूचकांक विधि है जिसका अर्थ है "इस सूचकांक में लेबल की स्थिति प्राप्त करें"। ध्यान दें कि टुकड़ा करने के बाद सेiloc अपने समापन बिंदु से अनन्य है, इसलिए हमें इस मान में 1 जोड़ना होगा यदि हम पंक्ति 'ग' भी चाहते हैं।

पांडा के प्रलेखन में आगे के उदाहरण हैं


12
महान व्याख्या! एक संबंधित प्रश्न मैं हमेशा से है, क्या संबंध है, अगर किसी भी, नियंत्रण रेखा के साथ iloc और ix SettingWithCopy चेतावनियों के साथ है? कुछ दस्तावेज हैं, लेकिन ईमानदार होने के लिए मैं अभी भी थोड़ा उलझन में हूँ pandas.pydata.org/pandas-docs/stable/…
मापन

3
@measureallthethings: loc, ilocऔर ixहो सकता है अभी भी चेतावनी को गति प्रदान करता है, तो वे एक साथ श्रृंखलित कर रहे हैं। उदाहरण के लिए लिंक किए गए डॉक्स में डेटाफ़्रेम का उपयोग करना dfmi.loc[:, 'one'].loc[:, 'second']चेतावनी को ठीक उसी तरह ट्रिगर करता है dfmi['one']['second']क्योंकि डेटा की एक प्रति (बजाय एक दृश्य के) पहले अनुक्रमण ऑपरेशन द्वारा वापस आ सकती है।
एलेक्स रिले

यदि आप किसी DateIndex को किसी दिनांक के साथ, या कुछ और देखना चाहते हैं, तो आप क्या उपयोग करते हैं df.ix[date, 'Cash']?
cjm2671

@ cjm2671: दोनों locया ixउस मामले में काम करना चाहिए। उदाहरण के लिए, df.loc['2016-04-29', 'Cash']'कैश' कॉलम से उस विशेष तिथि के साथ सभी पंक्ति अनुक्रमित लौटाएंगे। (आप स्ट्रिंग के साथ अनुक्रमणिका प्राप्त करते समय आप जैसे विशिष्ट हो सकते हैं, जैसे '2016-01'जनवरी 2016 में गिरने वाले सभी डेटासेट का चयन करेंगे, `'2016-01-02 11' 2 जनवरी 2016 को समय 11 के साथ डेटासेट का चयन करेंगे: ??: ?? ।)
एलेक्स रिले

यदि आप किसी बिंदु पर इस उत्तर को अद्यतन करना चाहते हैं, तो ix github.com/pandas-dev/pandas/issues/14218
JohnE

142

ilocपूर्णांक स्थिति के आधार पर कार्य करता है। तो इससे कोई फर्क नहीं पड़ता कि आपकी पंक्ति के लेबल क्या हैं, आप हमेशा कर सकते हैं, उदाहरण के लिए, करके पहली पंक्ति प्राप्त करें

df.iloc[0]

या अंतिम पांच पंक्तियों को करके

df.iloc[-5:]

आप इसे कॉलम पर भी उपयोग कर सकते हैं। यह 3 कॉलम को पुनः प्राप्त करता है:

df.iloc[:, 2]    # the : in the first position indicates all rows

आप उन्हें पंक्तियों और स्तंभों के प्रतिच्छेदन प्राप्त करने के लिए जोड़ सकते हैं:

df.iloc[:3, :3] # The upper-left 3 X 3 entries (assuming df has 3+ rows and columns)

दूसरी ओर, .locसूचकांकों के नाम का उपयोग करें। आइए पंक्ति और स्तंभ लेबल के रूप में स्ट्रिंग के साथ एक डेटा फ़्रेम सेट करें:

df = pd.DataFrame(index=['a', 'b', 'c'], columns=['time', 'date', 'name'])

तब हम पहली पंक्ति प्राप्त कर सकते हैं

df.loc['a']     # equivalent to df.iloc[0]

और 'date'कॉलम की दूसरी दो पंक्तियों द्वारा

df.loc['b':, 'date']   # equivalent to df.iloc[1:, 1]

और इसी तरह। अब, यह संभवतः इंगित करने के लायक है कि डिफ़ॉल्ट पंक्ति और स्तंभ सूचक DataFrame0 से और इस मामले में पूर्णांक हैं ilocऔर locउसी तरह से काम करेंगे। यही कारण है कि आपके तीन उदाहरण बराबर हैं। यदि आपके पास एक गैर-संख्यात्मक सूचकांक जैसे स्ट्रिंग्स या डेटाटाइम्स हैं, df.loc[:5] तो एक त्रुटि होगी।

इसके अलावा, आप केवल डेटा फ्रेम का उपयोग करके कॉलम पुनर्प्राप्ति कर सकते हैं __getitem__:

df['time']    # equivalent to df.loc[:, 'time']

अब मान लीजिए कि आप स्थिति और नामांकित अनुक्रमण का मिश्रण करना चाहते हैं, अर्थात, स्तंभों पर पंक्तियों और पदों पर नामों का उपयोग करके अनुक्रमण करना (स्पष्ट करने के लिए, मेरा मतलब है कि हमारे डेटा फ्रेम से चयन करें, बजाय पंक्ति इंडेक्स और पूर्णांकों में स्ट्रिंग के साथ एक डेटा फ़्रेम बनाना। स्तंभ सूचकांक)। यह वह जगह है जहाँ पर .ixआता है:

df.ix[:2, 'time']    # the first two rows of the 'time' column

मुझे लगता है कि यह भी ध्यान देने योग्य है कि आप बूलियन वैक्टर को locविधि में भी पारित कर सकते हैं । उदाहरण के लिए:

 b = [True, False, True]
 df.loc[b] 

की पहली और तीसरी पंक्तियाँ लौटाएँगे df। यह df[b]चयन के लिए समान है , लेकिन इसका उपयोग बूलियन वैक्टर के माध्यम से करने के लिए भी किया जा सकता है:

df.loc[b, 'name'] = 'Mary', 'John'

क्या df.iloc [:,:] सभी पंक्तियों और स्तंभों के बराबर है?
एल्विस

यह है, जैसा होगा df.loc[:, :]। इसका उपयोग संपूर्ण मूल्यों को फिर से असाइन करने DataFrameया इसका एक दृश्य बनाने के लिए किया जा सकता है।
जोकंड्रोन

119

मेरी राय में, स्वीकृत उत्तर भ्रामक है, क्योंकि यह केवल लापता मानों के साथ डेटाफ़्रेम का उपयोग करता है। मैं भी तरह अवधि नहीं है स्थिति के आधार पर के लिए .ilocऔर बदले में, पसंद करते हैं स्थान पूर्णांक के रूप में यह बहुत अधिक वर्णनात्मक है और वास्तव में क्या .ilocके लिए खड़ा है। मुख्य शब्द .ilocINTEGER है - INTEGERS की आवश्यकता है।

अधिक के लिए सबसेट चयन पर मेरी अत्यंत विस्तृत ब्लॉग श्रृंखला देखें


.ix अनिच्छुक और अस्पष्ट है और इसका उपयोग कभी नहीं किया जाना चाहिए

क्योंकि .ixपदावनत हम केवल .locऔर के बीच के अंतर पर ध्यान केंद्रित करेंगे .iloc

इससे पहले कि हम अंतरों के बारे में बात करें, यह समझना महत्वपूर्ण है कि डेटाफ्रैम में ऐसे लेबल हैं जो प्रत्येक कॉलम और प्रत्येक इंडेक्स को पहचानने में मदद करते हैं। आइए एक नजर डालते हैं सैंपल डाटाफ्रेम पर:

df = pd.DataFrame({'age':[30, 2, 12, 4, 32, 33, 69],
                   'color':['blue', 'green', 'red', 'white', 'gray', 'black', 'red'],
                   'food':['Steak', 'Lamb', 'Mango', 'Apple', 'Cheese', 'Melon', 'Beans'],
                   'height':[165, 70, 120, 80, 180, 172, 150],
                   'score':[4.6, 8.3, 9.0, 3.3, 1.8, 9.5, 2.2],
                   'state':['NY', 'TX', 'FL', 'AL', 'AK', 'TX', 'TX']
                   },
                  index=['Jane', 'Nick', 'Aaron', 'Penelope', 'Dean', 'Christina', 'Cornelia'])

यहाँ छवि विवरण दर्ज करें

बोल्ड के सभी शब्द लेबल हैं। लेबल, age, color, food, height, scoreऔर stateके लिए उपयोग किया जाता है कॉलम । अन्य लेबल, Jane, Nick, Aaron, Penelope, Dean, Christina, Corneliaके लिए उपयोग किया जाता है सूचकांक


एक DataFrame में विशेष पंक्तियों का चयन करने के लिए प्राथमिक तरीके के साथ कर रहे हैं .locऔर .ilocindexers। इनमें से प्रत्येक अनुक्रमणिका का उपयोग एक साथ स्तंभों का चयन करने के लिए भी किया जा सकता है, लेकिन अभी के लिए पंक्तियों पर ध्यान केंद्रित करना आसान है। साथ ही, प्रत्येक अनुक्रमणिका ब्रैकेट के एक सेट का उपयोग करती है जो उनके चयन करने के लिए तुरंत उनके नाम का अनुसरण करते हैं।

.loc केवल लेबल द्वारा डेटा का चयन करता है

हम पहले .locइंडेक्सर के बारे में बात करेंगे जो केवल इंडेक्स या कॉलम लेबल द्वारा डेटा का चयन करता है। हमारे नमूने DataFrame में, हमने इंडेक्स के मूल्यों के रूप में सार्थक नाम प्रदान किए हैं। कई DataFrames का कोई सार्थक नाम नहीं होगा और इसके बजाय, केवल 0 से n-1 तक पूर्णांकों के लिए डिफ़ॉल्ट होगा, जहां n DataFrame की लंबाई है।

आपके लिए उपयोग किए जा सकने वाले तीन अलग-अलग इनपुट हैं .loc

  • एक स्ट्रिंग
  • तार की एक सूची
  • स्टार्टिंग और स्टॉप वैल्यू के रूप में स्ट्रिंग्स का उपयोग करके स्लाइस नोटेशन

एक पंक्ति के साथ एक पंक्ति का चयन करना। एक स्ट्रिंग के साथ

डेटा की एक एकल पंक्ति का चयन करने के लिए, अनुक्रमणिका लेबल को कोष्ठक के अंदर रखें .loc

df.loc['Penelope']

यह एक श्रृंखला के रूप में डेटा की पंक्ति देता है

age           4
color     white
food      Apple
height       80
score       3.3
state        AL
Name: Penelope, dtype: object

तार की सूची के साथ .loc के साथ कई पंक्तियों का चयन करना

df.loc[['Cornelia', 'Jane', 'Dean']]

यह सूची में निर्दिष्ट क्रम में पंक्तियों के साथ एक DataFrame लौटाता है:

यहाँ छवि विवरण दर्ज करें

स्लाइस अंकन के साथ .loc के साथ कई पंक्तियों का चयन करना

स्लाइस अंकन को एक शुरुआत, रोक और चरण मूल्यों द्वारा परिभाषित किया गया है। लेबल द्वारा स्लाइस करते समय, पांडा में रिटर्न में स्टॉप वैल्यू शामिल होती है। निम्नलिखित हारून से डीन के लिए स्लाइस, समावेशी। इसका चरण आकार स्पष्ट रूप से परिभाषित नहीं है लेकिन 1 के लिए डिफ़ॉल्ट है।

df.loc['Aaron':'Dean']

यहाँ छवि विवरण दर्ज करें

कॉम्प्लेक्स स्लाइस को उसी तरह से लिया जा सकता है जैसे पायथन सूची में।

.iloc केवल पूर्णांक स्थान द्वारा डेटा का चयन करता है

चलो अब बारी है .iloc। DataFrame में डेटा की हर पंक्ति और कॉलम में एक पूर्णांक स्थान होता है जो इसे परिभाषित करता है। यह उस लेबल के अतिरिक्त है जो नेत्रहीन रूप से आउटपुट में प्रदर्शित होता है । पूर्णांक स्थान केवल 0 पर शीर्ष / बाईं ओर से पंक्तियों / स्तंभों की संख्या है।

आपके लिए उपयोग किए जा सकने वाले तीन अलग-अलग इनपुट हैं .iloc

  • पूर्णांक
  • पूर्णांकों की एक सूची
  • प्रारंभ और रोक मूल्यों के रूप में पूर्णांकों का उपयोग करके स्लाइस अंकन

एक पूर्णांक के साथ .iloc के साथ एकल पंक्ति का चयन करना

df.iloc[4]

यह 5 वीं पंक्ति (पूर्णांक स्थान 4) को एक श्रृंखला के रूप में लौटाता है

age           32
color       gray
food      Cheese
height       180
score        1.8
state         AK
Name: Dean, dtype: object

पूर्णांक की सूची के साथ .iloc के साथ कई पंक्तियों का चयन करना

df.iloc[[2, -2]]

यह तीसरी और दूसरी से अंतिम पंक्तियों का डेटाफ़्रेम लौटाता है:

यहाँ छवि विवरण दर्ज करें

कई पंक्तियों का चयन करें। टुकड़ा संकेतन के साथ .ococ

df.iloc[:5:3]

यहाँ छवि विवरण दर्ज करें


.Loc और .iloc के साथ पंक्तियों और स्तंभों का एक साथ चयन

दोनों की एक उत्कृष्ट क्षमता .loc/.ilocदोनों पंक्तियों और स्तंभों को एक साथ चुनने की उनकी क्षमता है। उपरोक्त उदाहरणों में, प्रत्येक चयन से सभी कॉलम वापस कर दिए गए थे। हम उसी प्रकार के इनपुट के साथ कॉलम चुन सकते हैं जैसे हम पंक्तियों के लिए करते हैं। हमें केवल पंक्ति और स्तंभ चयन को अल्पविराम से अलग करने की आवश्यकता है ।

उदाहरण के लिए, हम पंक्तियों की ऊँचाई, स्कोर और राज्य के साथ जेन और डीन का चयन कर सकते हैं:

df.loc[['Jane', 'Dean'], 'height':]

यहाँ छवि विवरण दर्ज करें

यह पंक्तियों के लिए लेबल की एक सूची का उपयोग करता है और कॉलम के लिए टुकड़ा संकेतन

हम स्वाभाविक रूप से .ilocकेवल पूर्णांक का उपयोग करके इसी तरह के संचालन कर सकते हैं।

df.iloc[[1,4], 2]
Nick      Lamb
Dean    Cheese
Name: food, dtype: object

लेबल और पूर्णांक स्थान के साथ एक साथ चयन

.ixलेबल और पूर्णांक स्थान के साथ एक साथ चयन करने के लिए उपयोग किया गया था जो कि उपयोगी था लेकिन कई बार भ्रमित और अस्पष्ट था और शुक्र है कि इसे हटा दिया गया है। इस घटना में कि आपको लेबल और पूर्णांक स्थानों के मिश्रण के साथ चयन करने की आवश्यकता है, आपको अपने चयन लेबल या पूर्णांक दोनों स्थान बनाने होंगे।

उदाहरण के लिए, यदि हम पंक्तियों का चयन करना चाहते हैं Nickऔर Corneliaकॉलम 2 और 4 के साथ, हम .locपूर्णांकों को निम्नलिखित के साथ लेबल में परिवर्तित करके उपयोग कर सकते हैं :

col_names = df.columns[[2, 4]]
df.loc[['Nick', 'Cornelia'], col_names] 

या वैकल्पिक रूप से, इंडेक्स लेबल्स को get_locइंडेक्स विधि के साथ पूर्णांक में परिवर्तित करें ।

labels = ['Nick', 'Cornelia']
index_ints = [df.index.get_loc(label) for label in labels]
df.iloc[index_ints, [2, 4]]

बूलियन चयन

.Loc अनुक्रमणिका बूलियन चयन भी कर सकती है। उदाहरण के लिए, अगर हम सभी पंक्तियों ढूँढने में दिलचस्पी रहे हैं wher उम्र 30 से ऊपर है और वापसी सिर्फ foodऔर scoreस्तंभों हम निम्न कर सकते हैं:

df.loc[df['age'] > 30, ['food', 'score']] 

आप इसे दोहरा सकते हैं, .ilocलेकिन आप इसे बूलियन श्रृंखला नहीं दे सकते। आपको बूलियन सीरीज़ को इस तरह एक शानदार सरणी में बदलना होगा:

df.iloc[(df['age'] > 30).values, [2, 4]] 

सभी पंक्तियों का चयन

.loc/.ilocकेवल कॉलम चयन के लिए उपयोग करना संभव है । आप इस तरह एक कोलन का उपयोग करके सभी पंक्तियों का चयन कर सकते हैं:

df.loc[:, 'color':'score':2]

यहाँ छवि विवरण दर्ज करें


अनुक्रमणिका ऑपरेटर, []पंक्तियों और स्तंभों का भी चयन कर सकता है, लेकिन एक साथ नहीं।

ज्यादातर लोग डेटाफ्रैम इंडेक्सिंग ऑपरेटर के प्राथमिक उद्देश्य से परिचित हैं, जो कॉलम का चयन करना है। एक स्ट्रिंग श्रृंखला के रूप में एक एकल कॉलम का चयन करता है और स्ट्रिंग्स की एक सूची एक DataFrame के रूप में कई कॉलम का चयन करती है।

df['food']

Jane          Steak
Nick           Lamb
Aaron         Mango
Penelope      Apple
Dean         Cheese
Christina     Melon
Cornelia      Beans
Name: food, dtype: object

एक सूची का उपयोग कई कॉलम का चयन करता है

df[['food', 'score']]

यहाँ छवि विवरण दर्ज करें

लोग किस चीज से कम परिचित हैं, वह यह है कि, जब स्लाइस नोटेशन का उपयोग किया जाता है, तो चयन पंक्ति लेबल या पूर्णांक स्थान द्वारा होता है। यह बहुत भ्रामक है और ऐसा कुछ है जिसका मैं लगभग कभी उपयोग नहीं करता लेकिन यह काम करता है।

df['Penelope':'Christina'] # slice rows by label

यहाँ छवि विवरण दर्ज करें

df[2:6:2] # slice rows by integer location

यहाँ छवि विवरण दर्ज करें

.loc/.ilocपंक्तियों के चयन के लिए गवाह को अत्यधिक पसंद किया जाता है। अनुक्रमणिका ऑपरेटर अकेले पंक्तियों और स्तंभों का एक साथ चयन करने में असमर्थ है।

df[3:5, 'color']
TypeError: unhashable type: 'slice'

6
वाह, यह एक बहुत अच्छी तरह से स्पष्ट और स्पष्ट व्याख्याओं में से एक था जो मैंने कभी भी एक प्रोग्रामिंग विषय के बारे में बताया है, आपने सामान्य अनुक्रमण के बारे में अंतिम में क्या समझाया जो पंक्ति या स्तंभों पर काम करता है, हमारे पास लोको और इलोक में से एक है। तरीका। मैं डेटाकैम्प कोर्स में उस कैविएट में आया था। a।) df.columns और df.index क्या लौटाते हैं? क्या यह तार की सूची है? यदि यह एक सूची है, तो क्या इस सूची में इस df.columns [[2,4]] जैसे दो तत्वों को एक्सेस करने की अनुमति है? b।) क्या मैं df.columns पर get_loc () कॉल कर सकता हूं? ग।) हमें आईएफओसी के मामले में df ['उम्र']> 30. शुल्क की आवश्यकता क्यों है।
प्रागुन

मैंने अब तक का सबसे अच्छा एंकर देखा है।
मैक्स

यह वास्तव में अच्छा उत्तर है, मुझे यह पसंद आया कि यह ix में ज्यादा नहीं मिलता है, जो कि गहराई तक गोता लगाने के लिए पदावनत और व्यर्थ है। धन्यवाद।
ओमबना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.