데이터 프레임의 마지막 요소에 대한 액세스 인덱스


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()있지만 NaNs 를 배제할지 여부에 따라 원하는 것이 아닐 수도 있습니다.

그 기억 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]이 데이터 프레임의 첫 번째 행을 제공하는 것처럼 보이는 다른 데이터 프레임이 있습니다. 특히 df.index [0]의 결과는 0이 아닙니다. , 그러나 df.ix [df.index [0]] 및 df.ix [0]은 동일한 결과를 제공합니다. 왜 그런 겁니까?
elelias 2013

인덱스를 볼 필요가 있지만 인덱스가 숫자가 아니기 때문이라고 생각합니다.이 경우 정수로 액세스 하면 키가 아닌 인덱스처럼 동작 할 수 있습니다 . 그 이유는 당신이 요청하면 무엇을 요구하는지에 대한 모호성이 없기 때문입니다 Something(["A", "B", "C"])[1]. 그러나 당신이 가지고 있다면 무엇을 원 Something([1,2,3,4])[1]하십니까? 관련된 몇 가지 골칫거리 에 대한 문서 의 다양한 섹션을 읽으십시오 .
DSM

float에 df [ 'xxx'] [df.index [0]]를 사용하는 방법은 무엇입니까? 나는 float 56.7888을 가지고 있으며 57 대신 56으로 변환되었습니다
lvthillo

1
전화 iget()하면 'Series' object has no attribute 'iget'.
Suzana

15

팬더 데이터 프레임의 행 인덱스를 정수로 가져 오기에서 @comte의 답변과 dmdip의 답변을 결합

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

index를 기반으로 데이터 프레임을 수정하려고하면 (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(가) 마지막 요소의 오프셋 (offset)을 나타냅니다. 따라서 df.tail(1)마지막 요소를 가져오고 df["your_column"][6], for your_column등 의 마지막 요소가됩니다 (하지만 df.last_valid_index()숫자 만 제공)
michael

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

이중 대괄호가있는 .iloc을 원합니다.

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])을 제공합니다. 그러면 '날짜'열을 요청하는 데이터 프레임이 반환됩니다. [ 'date']는 시리즈 ( yuck )를 제공하고 [[ 'date']]는 데이터 프레임을 제공합니다.


0

Pandas는 다음을 허용하는 NumPy 구문을 지원합니다.

df[len(df) -1:].index[0]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.