Ce face DataFrame.query()
query() primește condiția ca șir de caractere, în care folosești direct numele coloanelor: df.query("nota > 8") face același lucru ca df[df["nota"] > 8]. În text poți scrie and, or, not, comparații înlănțuite (7 <= nota <= 9) și in / not in cu liste.
O variabilă Python din program se folosește cu @ în față: df.query("nota >= @prag"). Un nume de coloană cu spații sau cu caractere speciale se pune între backticks: df.query("`nota finala` > 8"). Textele din condiție stau în ghilimele de alt tip decât cele ale șirului.
Parametri
| Parametru | Descriere |
|---|---|
expr |
Condiția, ca text. Numele coloanelor se scriu direct, variabilele cu @. |
engine |
"numexpr" (dacă pachetul e instalat) sau "python". Implicit alege singur. |
local_dict, global_dict |
Dicționare cu variabile în locul celor din program. Rar folosite. |
Ce returnează
Un DataFrame nou, cu rândurile care respectă condiția.
Exemple
Exemplul 1: Condiții simple și compuse
import pandas as pd
df = pd.DataFrame({
"nume": ["Ana", "Mihai", "Ioana", "Andrei", "Elena"],
"oras": ["Iași", "Cluj", "Iași", "Cluj", "Brașov"],
"nota": [9.5, 7.0, 8.5, 9.0, 6.0],
})
print(df.query("nota > 8 and oras == 'Iași'"))
print()
print(df.query("7 <= nota <= 9"))
print()
print(df.query("oras not in ['Iași', 'Cluj']"))
Rezultat
nume oras nota
0 Ana Iași 9.5
2 Ioana Iași 8.5
nume oras nota
1 Mihai Cluj 7.0
2 Ioana Iași 8.5
3 Andrei Cluj 9.0
nume oras nota
4 Elena Brașov 6.0
Exemplul 2: Variabile cu @ și coloane cu spații
prag și orase sunt variabile din program; coloana „nota finala” are un spațiu, deci stă între backticks.
import pandas as pd
df = pd.DataFrame({
"nume": ["Ana", "Mihai", "Ioana", "Andrei"],
"oras": ["Iași", "Cluj", "Iași", "Brașov"],
"nota finala": [9.5, 7.0, 8.5, 9.0],
})
prag = 8.5
orase = ["Iași", "Brașov"]
print(df.query("`nota finala` >= @prag and oras in @orase"))
Rezultat
nume oras nota finala
0 Ana Iași 9.5
2 Ioana Iași 8.5
3 Andrei Brașov 9.0
Greșeli frecvente
- Scrii variabila fără
@:df.query("nota > prag")caută o coloană numităpragși aruncă eroare dacă nu există. - Folosești aceleași ghilimele în interior și în exterior:
"oras == "Iași""închide șirul mai devreme. Pune textul în apostrofuri:"oras == 'Iași'". - Scrii o coloană cu spații fără backticks:
df.query("nota finala > 8")dă eroare de sintaxă. - Folosești
inplace=True: în pandas 3.1 parametrul este depreciat. Atribuie rezultatul:df = df.query(...).
Comenzi înrudite
Filtrare cu condiții (boolean indexing): Păstrează doar rândurile care îndeplinesc o condiție, cu operatorii &, |, ~ pentru condiții compuse și Series.between pentru intervale.Series.isin() și DataFrame.isin(): Verifică pentru fiecare valoare dacă se află într-o listă dată; util pentru a filtra rândurile după mai multe valori permise.DataFrame.loc: Selectează rânduri și coloane după etichete (numele din index și numele coloanelor) și permite modificarea valorilor.