Rozglądam się za tym, ale wydaje mi się, że nie mogę go znaleźć (choć musi być niezwykle trywialne).
Problem, który mam, polega na tym, że chciałbym pobrać wartość kolumny dla pierwszego i ostatniego wpisu ramki danych. Ale jeśli to zrobię:
df.ix[0]['date']
Dostaję:
datetime.datetime(2011, 1, 10, 16, 0)
ale jeśli to zrobię:
df[-1:]['date']
Dostaję:
myIndex
13 2011-12-20 16:00:00
Name: mydate
z innym formatem. Idealnie chciałbym mieć dostęp do wartości ostatniego indeksu ramki danych, ale nie mogę znaleźć sposobu.
Próbowałem nawet utworzyć kolumnę (IndexCopy) z wartościami indeksu i spróbować:
df.ix[df.tail(1)['IndexCopy']]['mydate']
ale daje to również inny format (ponieważ df.tail (1) ['IndexCopy'] nie wyświetla prostej liczby całkowitej).
Jakieś pomysły?
Something(["A", "B", "C"])[1]
, ale czego chcesz, jeśli maszSomething([1,2,3,4])[1]
? Przeczytaj różne sekcje w dokumentach na temat niektórych związanych z tym bólów głowy.iget()
daje'Series' object has no attribute 'iget'
.Łączenie odpowiedzi @ comte i odpowiedzi dmdipa w funkcji Pobierz indeks wiersza ramki danych pandy jako liczby całkowitej
df.tail(1).index.item()
podaje wartość indeksu.
Zwróć uwagę, że indeksy nie zawsze są dobrze zdefiniowane, niezależnie od tego, czy są indeksowane wielokrotnie czy pojedynczo. Modyfikowanie ramek danych przy użyciu indeksów może spowodować nieoczekiwane zachowanie. Będziemy mieć przykład z przypadkiem z wieloma indeksami, ale należy zauważyć, że dotyczy to również przypadku z pojedynczym indeksowaniem .
Powiedz, że mamy
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')
Próba dostępu do ostatniego elementu z
df[12, "y"]
wynikami indeksu(12, y) 5 (12, y) 5 dtype: int64
Jeśli spróbujesz zmodyfikować ramkę danych na podstawie indeksu
(12, y)
, zmodyfikujesz dwa wiersze zamiast jednego. Tak więc, mimo że nauczyliśmy się uzyskiwać dostęp do wartości indeksu ostatniego wiersza, może nie być dobrym pomysłem, jeśli chcesz zmienić wartości ostatniego wiersza na podstawie jego indeksu, ponieważ może istnieć wiele takich, które mają ten sam indeks. Wdf.iloc[-1]
tym przypadku powinieneś użyć, aby uzyskać dostęp do ostatniego wiersza.Odniesienie
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.item.html
źródło
df.tail(1).index
wydaje się najbardziej czytelny
źródło
index
,start=6
wskazuje przesunięcie ostatniego elementu. Więcdf.tail(1)
pobiera ostatni element,df["your_column"][6]
byłby ostatnim elementem, dlayour_column
, itp. (Aledf.last_valid_index()
podaje tylko liczbę)Może być już za późno, używam
index
metody, aby pobrać ostatni indeks DataFrame, a następnie używam[-1]
do uzyskania ostatnich wartości:Na przykład,
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]}')
Wynik jest
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
źródło
Chcesz .iloc z podwójnymi nawiasami.
import pandas as pd df = pd.DataFrame({"date": range(10, 64, 8), "not_date": "fools"}) df.index += 17 df.iloc[[0,-1]][['date']]
Dajesz .iloc listę indeksów - konkretnie pierwszy i ostatni, [0, -1]. To zwraca ramkę danych, z której prosisz o kolumnę „data”. ['date'] da ci serię ( fuj ), a [['date']] da ci ramkę danych.
źródło
Pandas obsługuje składnię NumPy, która umożliwia:
df[len(df) -1:].index[0]
źródło