डेटा फ्रेम में अंतिम तत्व का एक्सेस इंडेक्स


84

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

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

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'] एक साधारण पूर्णांक का उत्पादन नहीं करता है)।

कोई विचार?

जवाबों:


134

पूर्व का उत्तर अब .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

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

मुझे सूचकांक को देखने की आवश्यकता है, लेकिन मुझे संदेह है कि यह सूचकांक गैर-संख्यात्मक है, इस मामले में पूर्णांक द्वारा एक्सेस करना ऐसा व्यवहार कर सकता है जैसे यह एक सूचकांक है, न कि एक कुंजी। ऐसा इसलिए है क्योंकि अगर आप मांगते हैं तो इसमें कोई अस्पष्टता नहीं है Something(["A", "B", "C"])[1], लेकिन अगर आपके पास है तो आप क्या चाहते हैं Something([1,2,3,4])[1]? डॉक्स में शामिल विभिन्न अनुभागों को यहां पढ़ें, जिसमें कुछ सिरदर्द शामिल हैं।
DSM

फ्लोट के लिए df ['xxx'] [df.index [0]] का उपयोग कैसे करें? मेरे पास एक फ्लोट 56.7888 है और यह 57 के बजाय 56 में परिवर्तित हो गया है
लिवथिलो

1
कॉलिंग iget()देता है 'Series' object has no attribute 'iget'
सुजान

15

एक बिंदु के रूप में पांडा डेटाफ्रेम की एक पंक्ति के गेट इंडेक्स में @ कॉम्टे के उत्तर और डीएमडीआईपी के उत्तर को मिलाकर

df.tail(1).index.item()

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


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

बोलो हमारे पास है

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              # the index is (12, 'y')
    x    3
    y    5              # the index is also (12, 'y')

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

सूचकांक df[12, "y"]पैदावार के साथ अंतिम तत्व तक पहुंचने की कोशिश कर रहा है

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

यदि आप सूचकांक के आधार पर डेटाफ्रेम को संशोधित करने का प्रयास करते हैं (12, y), तो आप एक के बजाय दो पंक्तियों को संशोधित करेंगे। इस प्रकार, भले ही हमने पिछली पंक्ति के सूचकांक के मूल्य तक पहुंचना सीखा है, लेकिन यह अच्छा विचार नहीं हो सकता है यदि आप इसके सूचकांक के आधार पर अंतिम पंक्ति के मूल्यों को बदलना चाहते हैं क्योंकि कई ऐसे हो सकते हैं जो समान सूचकांक साझा करते हैं। आपको df.iloc[-1]इस मामले में अंतिम पंक्ति तक पहुंचने के लिए उपयोग करना चाहिए ।

संदर्भ

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


7
df.tail(1).index 

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


यह एक संख्या वापस नहीं करता है लेकिन: RangeIndex (प्रारंभ = 6, रोक = 7, चरण = 1)
alexandergs

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

3

अब बहुत देर हो सकती है, मैं indexएक DataFrame के अंतिम सूचकांक को प्राप्त करने के लिए विधि का उपयोग करता हूं, फिर [-1]अंतिम मान प्राप्त करने के लिए उपयोग करता हूं :

उदाहरण के लिए,

df = pd.DataFrame(np.zeros((4, 1)), columns=['A'])
print(f'df:\n{df}\n')

print(f'Index = {df.index}\n')
print(f'Last index = {df.index[-1]}')

आउटपुट है

df:
     A
0  0.0
1  0.0
2  0.0
3  0.0

Index = RangeIndex(start=0, stop=4, step=1)

Last index = 3

2

आप चाहते हैं। डबल ब्रैकेट के साथ .ococ

import pandas as pd
df = pd.DataFrame({"date": range(10, 64, 8), "not_date": "fools"})
df.index += 17
df.iloc[[0,-1]][['date']]

आप .iloc को इंडेक्स की सूची देते हैं - विशेष रूप से पहला और अंतिम, [0, -1]। वह डेटाफ्रेम लौटाता है जिससे आप 'तारीख' कॉलम मांगते हैं। ['तारीख'] आपको एक श्रृंखला ( yuck ) देगा, और [['तारीख']] आपको एक डेटाफ्रेम देगा।


0

पंडों ने NumPy सिंटैक्स का समर्थन किया है जो अनुमति देता है:

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