What are the multiple uses of '@' (at) symbol in Python?

Pandas-operatorer: Din Guide til Datafiltrering

28/01/2022

Rating: 4.39 (2153 votes)

I en verden af dataanalyse er evnen til effektivt at filtrere og udvælge specifikke datasæt afgørende for at udlede meningsfuld indsigt. Python-biblioteket Pandas er et utroligt kraftfuldt værktøj til datamanipulation, men mange, især begyndere, støder på en uventet forhindring, når de forsøger at anvende logiske betingelser. Brugen af standard Python-operatorer som 'and' og 'or' fører ofte til fejl og forvirring. Denne artikel er din omfattende guide til at forstå og korrekt anvende logiske operatorer i Pandas, så du kan filtrere dine DataFrame-objekter med præcision og selvtillid.

What is pandas & how do I use it?
Pandas is a Python library. Pandas is used to analyze data. We have created 14 tutorial pages for you to learn more about Pandas. Starting with a basic introduction and ends up with cleaning and plotting data: In our "Try it Yourself" editor, you can use the Pandas module, and modify the code to see the result.
Indholdsfortegnelse

Hvorfor standard Python-operatorer ('and', 'or') fejler i Pandas

Et almindeligt problem for nye Pandas-brugere er den frustrerende ValueError: The truth value of a Series is ambiguous. Denne fejl opstår, når man forsøger at bruge Pythons indbyggede logiske operatorer and eller or til at filtrere en DataFrame. Men hvorfor sker det?

Svaret ligger i, hvordan disse operatorer er designet. Pythons and og or er skabt til at arbejde med enkelte, sandhedsværdier (skalarer), såsom True eller False. De kan ikke håndtere en hel kolonne eller en Series af booleske værdier, som er det, en betingelse som df['kolonne'] > 5 returnerer. Når Pandas ser en hel serie af True/False-værdier, ved den ikke, hvordan den skal evaluere den til en enkelt sandhedsværdi. Skal den returnere True, hvis 'any' (enhver) værdi er sand, eller kun hvis 'all' (alle) værdier er sande? Denne tvetydighed er, hvad der udløser fejlen.

For at løse dette problem har Pandas implementeret sine egne versioner af logiske operatorer, der er designet til at arbejde element-for-element på tværs af serier. Disse er kendt som bitvise operatorer.

Can I use logical operators for Boolean indexing in pandas?
Logical operators for boolean indexing in Pandas It's important to realize that you cannot use any of the Python logical operators (and, or or not) on pandas.Series or pandas.DataFrame s (similarly you cannot use them on numpy.array s with more than one element).

De Korrekte Værktøjer: Bitvise Operatorer (&, |, ~)

For at udføre logiske operationer korrekt i Pandas skal du bruge de bitvise operatorer. Selvom de oprindeligt stammer fra operationer på binære tal, har Pandas overtaget dem til at udføre elementvise logiske sammenligninger på booleske serier.

  • & for logisk AND: Returnerer True for en række, kun hvis begge betingelser er opfyldt for den pågældende række.
  • | for logisk OR: Returnerer True for en række, hvis mindst én af betingelserne er opfyldt for den pågældende række.
  • ~ for logisk NOT: Inverterer sandhedsværdien for hver række i en serie (True bliver til False og omvendt).

En anden afgørende detalje er brugen af parenteser () omkring hver enkelt betingelse. På grund af Pythons operatorpræcedens er det nødvendigt at indkapsle hver betingelse for at sikre, at de evalueres korrekt, før den bitvise operator anvendes. Uden parenteser vil koden sandsynligvis fejle eller give et uventet resultat.

How do I use a bitwise operator in pandas?

Praktiske Eksempler: Filtrering i Aktion

Lad os se på, hvordan disse operatorer fungerer i praksis. Vi starter med at oprette en simpel DataFrame.

import pandas as pd data = { 'hold': ['A', 'A', 'B', 'B', 'B', 'C', 'C'], 'point': [25, 12, 15, 23, 19, 25, 29], 'assists': [5, 7, 7, 9, 12, 9, 4] } df = pd.DataFrame(data) 

Brug af Logisk AND (&)

Forestil dig, at vi vil finde alle rækker, hvor et hold har scoret mere end 20 point OG har præcis 9 assists. Vi kombinerer de to betingelser med & operatoren, og husker parenteserne.

How to use logical OR operator in pandas?
The example selects the rows where the "name" column value is equal to "Alice" or "Bobby". You can also use the numpy.logical_or method as a logical OR operator in Pandas. First, make sure you have the numpy module installed. # or with pip3 Now, import the module and use the numpy.logical_or() method.
# Filtrer rækker hvor point > 20 OG assists == 9 filtreret_df = df[(df['point'] > 20) & (df['assists'] == 9)] print(filtreret_df) 

Resultatet vil være en ny DataFrame, der kun indeholder de rækker, der opfylder begge krav:

 hold point assists 3 B 23 9 5 C 25 9 

Brug af Logisk OR (|)

Lad os nu sige, at vi er interesserede i rækker, hvor et hold enten har færre end 15 point ELLER mere end 10 assists. Her bruger vi | operatoren.

# Filtrer rækker hvor point < 15 ELLER assists > 10 filtreret_df_or = df[(df['point'] < 15) | (df['assists'] > 10)] print(filtreret_df_or) 

Dette vil returnere rækker, der opfylder mindst en af de to betingelser:

 hold point assists 1 A 12 7 4 B 19 12 

Brug af Logisk NOT (~)

NOT-operatoren er nyttig til at invertere en betingelse. Hvis vi for eksempel vil have alle rækker, undtagen dem der tilhører hold 'A', kan vi bruge ~.

# Filtrer alle rækker hvor hold IKKE er 'A' ikke_a_hold = df[~(df['hold'] == 'A')] print(ikke_a_hold) 

Resultatet er en DataFrame uden nogen rækker for hold 'A'.

How to use & operator in pandas?
You can use the & symbol as an “AND” operator in pandas. For example, you can use the following basic syntax to filter for rows in a pandas DataFrame that satisfy condition 1 and condition 2: The following examples show how to use this “AND” operator in different scenarios. Suppose we have the following pandas DataFrame: #create DataFrame
 hold point assists 2 B 15 7 3 B 23 9 4 B 19 12 5 C 25 9 6 C 29 4 

Sammenligning af Metoder til Logisk Filtrering

Selvom bitvise operatorer er den mest almindelige metode, findes der alternativer. Her er en tabel, der sammenligner de forskellige tilgange til filtrering.

FormålStandard MetodeAlternativ MetodeFordele ved Alternativ
Logisk AND(df.col1 > x) & (df.col2 < y)df.query('col1 > @x and col2 < @y')Mere læsbar syntaks, ingen parenteser nødvendige.
Logisk OR(df.col1 > x) | (df.col2 < y)df.query('col1 > @x or col2 < @y')Bruger de velkendte 'or' og 'and' strenge.
Flere Betingelser(betingelse1) & (betingelse2) & (betingelse3)np.logical_and.reduce([b1, b2, b3])Ideel til et dynamisk antal betingelser i en liste.

Ofte Stillede Spørgsmål (FAQ)

Hvorfor får jeg en `ValueError`, når jeg bruger 'and' til at filtrere i Pandas?

Denne fejl opstår, fordi Pythons 'and' operator er designet til at sammenligne to enkelte sandhedsværdier (f.eks. `True and False`), ikke hele serier af booleske værdier, som Pandas-betingelser producerer. Du skal i stedet bruge den bitvise operator &, som udfører en elementvis sammenligning.

How do I use a bitwise operator in pandas?
As such, Pandas overrides these operators with bitwise alternatives: To effectively apply Boolean indexing: Use Bitwise Operators: Always prefer using &, |, and ~ for logical operations on Pandas data structures. Enclose Conditions in Parentheses: Group conditions using parentheses to avoid operator precedence issues. For example:

Skal jeg altid bruge parenteser omkring mine betingelser?

Ja, det er stærkt anbefalet og i de fleste tilfælde nødvendigt. Pythons regler for operatorpræcedens prioriterer bitvise operatorer som & højere end sammenligningsoperatorer som > eller ==. Uden parenteser vil Python forsøge at evaluere df['point'] > (20 & df['assists']) == 9, hvilket er meningsløst og vil resultere i en fejl. Parenteserne sikrer, at hver betingelse evalueres til en boolesk serie, før den bitvise operator anvendes.

Hvad er fordelen ved at bruge `df.query()`?

DataFrame.query()-metoden giver dig mulighed for at skrive dine betingelser som en streng. Dette kan gøre koden mere læsbar, især ved komplekse filtreringer, da du kan bruge 'and' og 'or' i strengen og undgå de mange parenteser og bitvise operatorer. Det kan også være lidt mere performant i visse situationer.

How to select rows based on some conditions in pandas Dataframe? Let’s see how to Select rows based on some conditions in Pandas DataFrame. Selecting rows based on particular column value using '>', '=', '=', '<=', '!=' operator. Code #1 : Selecting all the rows from the given dataframe in which 'Percentage' is greater than 80 using basic method. Output :[/caption]

Hvornår er det bedst at bruge NumPy's logiske funktioner som `np.logical_and`?

NumPy's funktioner er særligt nyttige, når du har en liste af booleske serier, som du vil kombinere. For eksempel, hvis du dynamisk genererer flere filterbetingelser og gemmer dem i en liste, kan du bruge np.logical_and.reduce() til at anvende dem alle på én gang, hvilket er mere elegant end at kæde en lang række &-operatorer sammen.

Konklusion

At mestre logisk filtrering i Pandas er en fundamental færdighed for enhver dataanalytiker. Nøglen er at huske at udskifte Pythons standard and, or og not med Pandas' elementvise, bitvise operatorer: &, |, og ~. Lige så vigtigt er det at indkapsle hver enkelt betingelse i parenteser for at undgå fejl relateret til operatorpræcedens. Ved at følge disse simple regler og udforske alternativer som .query(), kan du transformere din datafiltrering fra en kilde til frustration til et hurtigt og effektivt værktøj i din analyseværktøjskasse.

Hvis du vil læse andre artikler, der ligner Pandas-operatorer: Din Guide til Datafiltrering, kan du besøge kategorien Sundhed.

Go up