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

나는 이것을 둘러 보았지만 그것을 찾을 수없는 것 같습니다 (매우 사소한 것임에도 불구하고).

내가 가진 문제는 데이터 프레임의 첫 번째 및 마지막 항목에 대한 열 값을 검색하고 싶다는 것입니다. 하지만 내가 할 경우 :

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’]는 단순한 정수를 출력하지 않기 때문에).

어떤 아이디어?



답변

이전 답변은 이제 다음으로 대체됩니다 .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


답변

팬더 데이터 프레임의 행 인덱스를 정수로 가져 오기에서 @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


답변

df.tail(1).index

가장 읽기 쉬운 것 같습니다


답변

지금은 너무 늦을 수 있습니다. 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


답변

이중 대괄호가있는 .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’]]는 데이터 프레임을 제공합니다.


답변

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

df[len(df) -1:].index[0]


답변