Я искал это, но, похоже, не нашел (хотя это должно быть чрезвычайно тривиально).
Проблема в том, что я хотел бы получить значение столбца для первой и последней записи фрейма данных. Но если я это сделаю:
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'] не выводит простое целое число).
Есть идеи?
Something(["A", "B", "C"])[1]
, но что вы хотите, если имеетеSomething([1,2,3,4])[1]
? Прочтите различные разделы здесь, в документации, о некоторых сопутствующих головных болях.iget()
дает'Series' object has no attribute 'iget'
.Объединение ответа @comte и ответа dmdip в Получить индекс строки фрейма данных pandas как целое число
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
источник
df.tail(1).index
кажется наиболее читаемым
источник
index
, тоstart=6
указывает на смещение последнего элемента. Итак,df.tail(1)
получает последний элемент,df["your_column"][6]
будет последним элементом дляyour_column
и т. Д. (Ноdf.last_valid_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'] даст вам серию ( фу ), а [['date']] даст вам фрейм данных.
источник
Pandas поддерживает синтаксис NumPy, который позволяет:
df[len(df) -1:].index[0]
источник