Estoy buscando esto, pero parece que no puedo encontrarlo (aunque debe ser extremadamente trivial).
El problema que tengo es que me gustaría recuperar el valor de una columna para las primeras y últimas entradas de un marco de datos. Pero si lo hago:
df.ix[0]['date']
Yo obtengo:
datetime.datetime(2011, 1, 10, 16, 0)
pero si lo hago:
df[-1:]['date']
Yo obtengo:
myIndex
13 2011-12-20 16:00:00
Name: mydate
con un formato diferente. Idealmente, me gustaría poder acceder al valor del último índice del marco de datos, pero no puedo encontrar cómo.
Incluso intenté crear una columna (IndexCopy) con los valores del índice y probé:
df.ix[df.tail(1)['IndexCopy']]['mydate']
pero esto también produce un formato diferente (ya que df.tail (1) ['IndexCopy'] no genera un entero simple).
¿Algunas ideas?
Something(["A", "B", "C"])[1]
, pero ¿qué quiere si lo tieneSomething([1,2,3,4])[1]
? Lea las distintas secciones aquí en los documentos sobre algunos de los dolores de cabeza involucrados.iget()
da'Series' object has no attribute 'iget'
.Combinando la respuesta de @ comte y la respuesta de dmdip en Obtener índice de una fila de un marco de datos de pandas como un entero
df.tail(1).index.item()
le da el valor del índice.
Tenga en cuenta que los índices no siempre están bien definidos, no importa si tienen un índice múltiple o un índice único. La modificación de los marcos de datos mediante índices puede provocar un comportamiento inesperado. Tendremos un ejemplo con un caso de índices múltiples, pero tenga en cuenta que esto también es cierto en un caso de índice único .
Di que tenemos
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')
Intentando acceder al último elemento con los
df[12, "y"]
rendimientos del índice(12, y) 5 (12, y) 5 dtype: int64
Si intenta modificar el marco de datos en función del índice
(12, y)
, modificará dos filas en lugar de una. Por lo tanto, aunque aprendimos a acceder al valor del índice de la última fila, puede que no sea una buena idea si desea cambiar los valores de la última fila en función de su índice, ya que podría haber muchos que compartan el mismo índice. Sindf.iloc[-1]
embargo, debe usar para acceder a la última fila en este caso.Referencia
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.item.html
fuente
df.tail(1).index
parece el más legible
fuente
index
,start=6
indica el desplazamiento del último elemento. Entonces,df.tail(1)
obtiene el último elemento,df["your_column"][6]
sería el último elemento, parayour_column
, etc. (perodf.last_valid_index()
le da solo el número)Puede que sea demasiado tarde ahora, utilizo el
index
método para recuperar el último índice de un DataFrame, luego lo uso[-1]
para obtener los últimos valores:Por ejemplo,
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]}')
La salida es
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
fuente
Quieres .iloc con corchetes dobles.
import pandas as pd df = pd.DataFrame({"date": range(10, 64, 8), "not_date": "fools"}) df.index += 17 df.iloc[[0,-1]][['date']]
Le da a .iloc una lista de índices, específicamente el primero y el último, [0, -1]. Eso devuelve un marco de datos desde el que solicita la columna 'fecha'. ['fecha'] le dará una serie ( puaj ), y [['fecha']] le dará un marco de datos.
fuente
Pandas admite la sintaxis NumPy que permite:
df[len(df) -1:].index[0]
fuente