Vraag Een panda's dataframe indexeren op integer


Ik kan er geen elegante manier aan vinden inhoudsopgave een pandas.DataFrame door een integer-index. In het volgende voorbeeld wil ik de waarde 'a' krijgen van het eerste element van de 'A' kolom.

import pandas
df = pandas.DataFrame(
    {'A':['a','b', 'c'], 'B':['f', 'g', 'h']}, 
    index=[10,20,30]
    )

ik zou verwachten df['A'].ix[0] en df['A'][10] beide om terug te keren 'a'. De df['A'][10] komt terug 'a', maar df['A'].ix[0] gooit een KeyError: 0. De enige manier die ik kon bedenken om de waarde te krijgen 'a' gebaseerd op de index 0 is om de volgende aanpak te gebruiken.

df['A'][df['A'].index[0]]

Is er een kortere weg om te krijgen 'a' uit het dataframe, met behulp van de 0-index?

Bijwerken

Vanaf panda's 0.11 is er een andere manier om index op integer.

df.iloc[0] # integer based, gives the first row
df.loc[10] # label based, gives the row with label 10

Deze Vervangt de irow nadering .


10
2017-07-23 21:57


oorsprong


antwoorden:


Je krijgt een foutmelding met df['A'].ix[0] omdat uw indexering niet begint bij 0, begint het bij 10. U kunt de gewenste waarde krijgen met een van de volgende zaken

df['A'].ix[10]
df['A'].irow(0)

De eerste gebruikt de juiste index. Het tweede commando, waarvan ik vermoed dat het wat je zoekt, vindt de waarde op basis van het rijnummer, in plaats van op indexwaarde, en is technisch gezien slechts twee tekens langer dan df['A'].ix[0] werkte.

Als alternatief kunt u de indexen opnieuw instellen, zodat deze zullen reageren zoals u verwacht df['A'].ix[0]:

df2=df.reset_index()

Hiermee worden uw oude indexen (10, 20, enz.) Bewaard door ze in een kolom met de naam "index" in het dataframe van df2 te plaatsen. Dan df2['A'].ix[0] zal 'a' retourneren. Als u de oude 10-gebaseerde indexen wilt verwijderen, kunt u de vlag invoegen drop=True tussen haakjes van de functie reset_index.


13
2017-07-24 00:38



In de nieuwere pandas-versie kunt u ook df ["A"] gebruiken. Iat (0).


0
2017-12-25 12:54