Zoeken…


Invoering

Toegang tot rijen in een dataframe met behulp van de dataframe indexer voorwerpen .ix , .loc , .iloc en hoe het zich van het gebruik van een boolean masker.

Toegang tot een DataFrame met een booleaanse index

Dit wordt ons voorbeeldgegevensframe:

df = pd.DataFrame({"color": ['red', 'blue', 'red', 'blue']},
                  index=[True, False, True, False])
      color
True    red
False  blue
True    red
False  blue

Toegang met .loc

df.loc[True]
     color
True   red
True   red

Toegang met .iloc

df.iloc[True]
>> TypeError

df.iloc[1]
color    blue
dtype: object

Belangrijk om op te merken is dat oudere versies van panda's geen onderscheid maakten tussen Booleaanse en gehele invoer, dus .iloc[True] zou hetzelfde zijn als .iloc[1]

Toegang met .ix

df.ix[True]
     color
True   red
True   red

df.ix[1]
color    blue
dtype: object

Zoals u ziet, heeft .ix twee gedragingen. Dit is een zeer slechte gewoonte in code en moet daarom worden vermeden. Gelieve gebruik .iloc of .loc om meer expliciet zijn.

Een boolean-masker toepassen op een dataframe

Dit wordt ons voorbeeldgegevensframe:

  color      name   size
0   red      rose    big
1  blue    violet    big
2   red     tulip  small
3  blue  harebell  small

Gebruik de magische __getitem__ of [] accessor. Als je het een lijst geeft met Waar en Onwaar van dezelfde lengte als het dataframe, krijg je:

df[[True, False, True, False]]
  color   name   size
0   red   rose    big
2   red  tulip  small

Gegevens maskeren op basis van kolomwaarde

Dit wordt ons voorbeeldgegevensframe:

  color      name   size
0   red      rose    big
1  blue    violet  small
2   red     tulip  small
3  blue  harebell  small

Toegang tot een enkele kolom vanuit een gegevensframe, kunnen we een eenvoudige vergelijking == gebruiken om elk element in de kolom te vergelijken met de gegeven variabele, waardoor een pd.Series wordt geproduceerd. pd.Series waar en onwaar

df['size'] == 'small'
0    False
1     True
2     True
3     True
Name: size, dtype: bool

Deze pd.Series is een extensie van een np.array , een extensie van een eenvoudige list . We kunnen dit dus overhandigen aan de __getitem__ of [] accessor zoals in het bovenstaande voorbeeld.

size_small_mask = df['size'] == 'small'
df[size_small_mask]
  color      name   size
1  blue    violet  small
2   red     tulip  small
3  blue  harebell  small

Gegevens maskeren op basis van indexwaarde

Dit wordt ons voorbeeldgegevensframe:

         color   size
name                 
rose       red    big
violet    blue  small
tulip      red  small
harebell  blue  small

We kunnen een masker maken op basis van de indexwaarden, net als op een kolomwaarde.

rose_mask = df.index == 'rose'
df[rose_mask]
     color size
name           
rose   red  big

Maar dit is bijna hetzelfde als

df.loc['rose']
color    red
size     big
Name: rose, dtype: object

Het belangrijke verschil is dat wanneer .loc slechts één rij in de overeenkomende index tegenkomt, het een pd.Series retourneert. pd.Series , als het meer rijen tegenkomt die overeenkomen, retourneert het een pd.DataFrame . Dit maakt deze methode nogal onstabiel.

Dit gedrag kan worden beheerst door de .loc een lijst te geven van een enkel item. Dit zal het dwingen om een dataframe terug te sturen.

df.loc[['rose']]
         color   size
name                 
rose       red    big


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow