2016-08-12 5 views
6

मैं अजगर के लिए नया हूँ। यह पूछने के लिए एक बुनियादी सवाल की तरह लगता है। इस -क्यों happenening है: लेकिन मैं वास्तव में समझने के लिए यहाँपांडस में अनुक्रमण कैसे काम करता है?

import numpy as np 
import pandas as pd 
tempdata = np.random.random(5) 
myseries_one = pd.Series(tempdata) 
myseries_two = pd.Series(data = tempdata, index = ['a','b','c','d','e']) 
myseries_three = pd.Series(data = tempdata, index = [10,11,12,13,14]) 


myseries_one 
Out[1]: 
0 0.291293 
1 0.381014 
2 0.923360 
3 0.271671 
4 0.605989 
dtype: float64 

myseries_two 
Out[2]: 
a 0.291293 
b 0.381014 
c 0.923360 
d 0.271671 
e 0.605989 
dtype: float64 

myseries_three 
Out[3]: 
10 0.291293 
11 0.381014 
12 0.923360 
13 0.271671 
14 0.605989 
dtype: float64 

क्या हो रहा है प्रत्येक dataframe

myseries_one[0] #As expected 
Out[74]: 0.29129291112626043 

myseries_two[0] #As expected 
Out[75]: 0.29129291112626043 

myseries_three[0] 
KeyError:0 

Doubt1 से पहले तत्व अनुक्रमण करना चाहते हैं? Myseries_three [0] मुझे एक keyError क्यों देता है? myseries_one [0], myseries_one [0] या myseries_three [0] को कॉल करके हमारा क्या मतलब था? क्या इस तरह से फोन करना मतलब है कि हम rownames द्वारा बुला रहे हैं?

संदेह 2: -यह पाइथन में राउनम्स और राउनंबर आर में राउनम्स और राउनंबर के रूप में अलग-अलग काम करता है?

myseries_one[0:2] 
Out[78]: 
0 0.291293 
1 0.381014 
dtype: float64 

myseries_two[0:2] 
Out[79]: 
a 0.291293 
b 0.381014 
dtype: float64 

myseries_three[0:2] 
Out[80]: 
10 0.291293 
11 0.381014 
dtype: float64 

Doubt3: - myseries_three [0] rownames तो कैसे myseries_three से बुला मतलब बुला तो [0: 3] उत्पादन उत्पादन? myseries_three [0: 4] का मतलब है कि हम rownumber द्वारा बुला रहे हैं? कृपया समझाएं और मार्गदर्शन करें। मैं आर से पायथन तक माइग्रेट कर रहा हूं। तो यह मेरे लिए थोड़ा उलझन में है।

+1

पहले संदेह के लिए, आप 'कुंजी error' हो रही है, मुझे लगता है, क्योंकि, सूचकांक' 0' मौजूद नहीं है क्योंकि आप स्पष्ट रूप से सूचकांक की पहचान कर रहे हैं। इसे ठीक करने के लिए आप निम्न का उपयोग कर सकते हैं: 'myseries_three.iloc [0] '। – Dataman

+2

यह एक जिज्ञासा की तरह दिखता है कि पांडा आपको 'myseries_two' उदाहरण में मदद कर रहा है, सीरीज़ के लिए इंडेक्सिंग लेबल आधारित है, इसलिए इसे दूसरे उदाहरण के लिए' KeyError' उठाया जाना चाहिए था, लेकिन इसने स्थिति के आधार पर स्थिति आधारित अनुक्रमण का उपयोग करने का निर्णय लिया आपके लिए, आपकी समझ गलत नहीं है, दस्तावेज़ देखें: http://pandas.pydata.org/pandas-docs/stable/indexing.html#basics – EdChum

+0

@Dataman टिप्पणी में जोड़ना। _three में, "0" के साथ "14" को प्रतिस्थापित करें, और परिणाम देखें। यदि कुंजी 'टेक्स्ट' हैं तो संख्या अनुक्रमण 'अभी भी' काम करता है। यदि चाबियाँ संख्याएं हैं, तो पांडा के लिए कुंजी की खोज की जाती है। प्रयासों को डालने के लिए – Merlin

उत्तर

4

जब आप myseries[something] के साथ टुकड़ा करने का प्रयास कर रहे हैं, तो something अक्सर संदिग्ध होता है। आप उस अस्पष्टता के मामले को हाइलाइट कर रहे हैं। आपके मामले में, पांडा आपके मतलब का आकलन करके आपकी मदद करने की कोशिश कर रहे हैं।

myseries_one[0] #As expected 
Out[74]: 0.29129291112626043 

myseries_one में पूर्णांक लेबल हैं। यह समझ में आता है कि जब आप एक पूर्णांक के साथ टुकड़ा करने का प्रयास करते हैं जिसे आप उस पूर्णांक के साथ लेबल करने वाले तत्व को प्राप्त करना चाहते हैं। यह पता चला है कि आपके पास 0 के साथ लेबल वाला तत्व है जो आपको वापस कर दिया गया है।

myseries_two[0] #As expected 
Out[75]: 0.29129291112626043 

myseries_two स्ट्रिंग लेबल हैं। यह बेहद असंभव है कि आप इस श्रृंखला को 0 के लेबल के साथ टुकड़ा करना चाहते हैं जब लेबल सभी तार होते हैं। तो, पांडा मानते हैं कि आप 0 की स्थिति का मतलब रखते हैं और पहला तत्व लौटाते हैं (धन्यवाद पांडा, जो सहायक था)।

myseries_three[0] 
KeyError:0 

myseries_three पूर्णांक लेबल है और आप एक पूर्णांक के साथ काट करने के लिए ... सही प्रयास कर रहे हैं। आइए बस आपके लिए यह मान प्राप्त करें ... KeyError। ओह, वह सूचकांक लेबल मौजूद नहीं है। इस मामले में, यह अनुमान लगाने से विफल होने के लिए पांडा के लिए सुरक्षित है कि शायद आप स्थिति के आधार पर टुकड़ा करना चाहते हैं। दस्तावेज यह भी बताता है कि यदि आप अस्पष्टता को हटाना चाहते हैं, तो लेबल आधारित स्लाइसिंग के लिए loc और स्थिति आधारित स्लाइसिंग के लिए iloc का उपयोग करें।

की कोशिश loc

myseries_one.loc[0] 
0.29129291112626043 

myseries_two.loc[0] 
KeyError:0 

myseries_three.loc[0] 
KeyError:0 

केवल myseries_one एक लेबल 0 है करते हैं। अन्य दो वापसी KeyError रों

की कोशिश iloc

myseries_one.iloc[0] 
0.29129291112626043 

myseries_two.iloc[0] 
0.29129291112626043 

myseries_three.iloc[0] 
0.29129291112626043 

वे सब 0 की एक स्थिति है और पहला तत्व तदनुसार वापसी करते हैं।


रेंज टुकड़ा करने की क्रिया के लिए, पांडा कम व्याख्यात्मक और पूर्णांक टुकड़ा 0:2 के लिए स्थितीय टुकड़ा करने की क्रिया के लिए लाठी हो का फैसला किया। याद रखो। वास्तविक वास्तविक लोग (पांडस कोड लिखने वाले प्रोग्रामर) ये निर्णय लेते हैं। जब आप कुछ ऐसा करने का प्रयास कर रहे हैं जो संदिग्ध है, तो आप अलग-अलग परिणाम प्राप्त कर सकते हैं। अस्पष्टता को दूर करने के लिए, loc और iloc का उपयोग करें।

iloc

myseries_one.iloc[0:2] 

0 0.291293 
1 0.381014 
dtype: float64 

myseries_two.iloc[0:2] 

a 0.291293 
b 0.381014 
dtype: float64 

myseries_three.iloc[0:2] 

10 0.291293 
11 0.381014 
dtype: float64 

loc

myseries_one.loc[0:2] 

0 0.291293 
1 0.381014 
2 0.923360 
dtype: float64 

myseries_two.loc[0:2] 

TypeError: cannot do slice indexing on <class 'pandas.indexes.base.Index'> with these indexers [0] of <type 'int'> 

myseries_three.loc[0:2] 

Series([], dtype: float64) 
+0

धन्यवाद। – user110244

संबंधित मुद्दे