2013-04-07 27 views
31

में पिछले तत्व की एक्सेस इंडेक्स मैं इसके लिए चारों ओर देख रहा हूं लेकिन मुझे यह प्रतीत नहीं होता है (हालांकि यह बेहद छोटा होना चाहिए)।डेटा फ्रेम

मेरी समस्या यह है कि मैं डेटा फ्रेम की पहली और आखिरी प्रविष्टियों के लिए कॉलम के मान को पुनर्प्राप्त करना चाहता हूं। लेकिन अगर मैं कार्य करें:

df.ix[0]['date'] 

मैं:

datetime.datetime(2011, 1, 10, 16, 0) 

लेकिन अगर मैं कार्य करें:

df[-1:]['date'] 

मैं:

myIndex 
13   2011-12-20 16:00:00 
Name: mydate 
एक अलग प्रारूप के साथ

। आदर्श रूप में, मैं डेटा फ्रेम की अंतिम अनुक्रमणिका के मूल्य तक पहुंचने में सक्षम होना चाहता हूं, लेकिन मुझे यह नहीं मिल रहा है।

मैं भी सूचकांक के मूल्यों के साथ एक कॉलम (IndexCopy) बना सकते हैं और कोशिश करने की कोशिश की:

df.ix[df.tail(1)['IndexCopy']]['mydate'] 

लेकिन यह भी एक अलग प्रारूप पैदावार (के बाद से df.tail (1) [ 'IndexCopy'] एक साधारण पूर्णांक आउटपुट नहीं करता है)।

कोई विचार?

उत्तर

40

पूर्व जवाब अब .iloc ने ले जाता है:

>>> df = pd.DataFrame({"date": range(10, 64, 8)}) 
>>> df.index += 17 
>>> df 
    date 
17 10 
18 18 
19 26 
20 34 
21 42 
22 50 
23 58 
>>> df["date"].iloc[0] 
10 
>>> df["date"].iloc[-1] 
58 

सबसे छोटा रास्ता मैं का उपयोग करता है .iget() के बारे में सोच सकते हैं:

>>> df = pd.DataFrame({"date": range(10, 64, 8)}) 
>>> df.index += 17 
>>> df 
    date 
17 10 
18 18 
19 26 
20 34 
21 42 
22 50 
23 58 
>>> df['date'].iget(0) 
10 
>>> df['date'].iget(-1) 
58 
वैकल्पिक रूप से

:

>>> df['date'][df.index[0]] 
10 
>>> df['date'][df.index[-1]] 
58 

.first_valid_index() और .last_valid_index() भी है, लेकिन इस पर निर्भर करता है कि आप NaN से इनकार करना चाहते हैं या नहीं, वे शायद आप जो चाहते हैं वह हो।

याद रखें कि df.ix[0] आप पहली बार नहीं देता है, लेकिन 0. द्वारा अनुक्रमित एक उदाहरण के लिए, उपरोक्त मामले में, df.ix[0] उत्पादन होगा

>>> df.ix[0] 
Traceback (most recent call last): 
    File "<ipython-input-489-494245247e87>", line 1, in <module> 
    df.ix[0] 
[...] 
KeyError: 0 
+0

आपके उत्तर के लिए धन्यवाद। हालांकि, मेरे पास एक और डेटा फ्रेम है जिसमें df.ix [0] डेटा फ्रेम की पहली पंक्ति देता है, भले ही पहली अनुक्रमणिका 0 न हो। विशेष रूप से, df.index [0] का परिणाम है 0 नहीं, और अभी तक df.ix [df.index [0]] और df.ix [0] एक ही परिणाम देते हैं। ऐसा क्यों है? – elelias

+0

मुझे इंडेक्स को देखना होगा, लेकिन मुझे संदेह है क्योंकि इंडेक्स गैर-संख्यात्मक है, जिसमें पूर्णांक द्वारा एक्सेस किया जा रहा है * * व्यवहार की तरह व्यवहार कर सकता है, न कि एक कुंजी। ऐसा इसलिए है क्योंकि आप जो कुछ पूछ रहे हैं उसमें कोई अस्पष्टता नहीं है यदि आप 'कुछ (["ए", "बी", "सी"] पूछते हैं) [1]', लेकिन आप क्या चाहते हैं यदि आपके पास कुछ है ([1,2,3,4]) [1] '? इसमें शामिल कुछ सिरदर्दों पर विभिन्न खंड [यहां दस्तावेज़ों में] पढ़ें (http://pandas.pydata.org/pandas-docs/dev/gotchas.html#integer-indexing)। – DSM

3
df.tail(1).index 

लगता है सबसे पठनीय

+0

यह एक संख्या वापस नहीं करता है लेकिन: रेंजइंडेक्स (स्टार्ट = 6, स्टॉप = 7, चरण = 1) – alexandergs

+1

एलेक्स: लौटाए गए 'इंडेक्स' से, 'start = 6' अंतिम तत्व के ऑफसेट को इंगित करता है। तो, 'df.tail (1) 'अंतिम तत्व प्राप्त करता है,' df [" your_column "] [6]' your_column', आदि के लिए अंतिम तत्व होगा (लेकिन 'df.last_valid_index()' आपको बस देता है रेखावृत्त) – michael

4

@ कोम्टे के जवाब और Get index of a row of a pandas dataframe as an integer

df.tail(1).index.item() 
में dmdip के जवाब का मेल 10

आपको सूचकांक का मूल्य देता है।


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

df = pd.DataFrame({'x':[1,1,3,3],'y':[3,3,5,5]},index=[11,11,12,12]).stack() 

11 x 1 
    y 3 
    x 1 
    y 3 
12 x 3 
    y 5    # index is (12, 'y') 
    x 3 
    y 5    # index is also (12, 'y') 

df.tail(1).index.item() # gives (12, 'y') 

इस प्रकार, सूचकांक के साथ पिछले तत्व का उपयोग करने की कोशिश कर रहा df[12, "y"] देता

(12, y) 5 
(12, y) 5 
dtype: int64 

इस प्रकार, भले ही हम अंतिम पंक्ति के सूचकांक के मूल्य तक पहुँचने के लिए सीखा है, यह नहीं हो सकता है एक अच्छा विचार अगर आप अपनी अनुक्रमणिका के आधार पर अंतिम पंक्ति के मानों को बदलना चाहते हैं क्योंकि वही अनुक्रमणिका साझा करने वाले कई लोग हो सकते हैं। हालांकि, इस मामले में अंतिम पंक्ति तक पहुंचने के लिए आपको df.iloc[-1] का उपयोग करना चाहिए।

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.item.html