Maison >développement back-end >Tutoriel Python >Comment sélectionner efficacement les données d'un DataFrame Pandas en fonction des valeurs de colonne ?
Comment sélectionner des données d'un DataFrame en fonction des valeurs de colonne
En SQL, une requête typique pour sélectionner des lignes en fonction des valeurs de colonne ressemblerait comme :
SELECT * FROM table WHERE column_name = some_value
Pour arriver au même résultat dans Pandas, il existe plusieurs approches :
Correspondance exacte des valeurs
Pour sélectionner les lignes où la valeur de la colonne est égale à une valeur spécifique (some_value), utilisez l'opérateur == dans .loc :
df.loc[df['column_name'] == some_value]
Inclusion et exclusion de valeurs
Pour sélectionner les lignes où la colonne la valeur est contenue dans une liste (some_values), utilisez la fonction isin :
df.loc[df['column_name'].isin(some_values)]
Pour exclure des valeurs spécifiques, annulez la série booléenne renvoyée par isin :
df = df.loc[~df['column_name'].isin(some_values)] # Note: This is not an in-place operation
Combinaison Conditions
Plusieurs conditions peuvent être combinées à l'aide d'opérateurs logiques comme & (AND) et | (OU) :
df.loc[(df['column_name'] >= A) & (df['column_name'] <= B)]
Notez que les parenthèses sont nécessaires pour garantir la bonne priorité des opérateurs.
Exemple
Considérez le DataFrame :
import pandas as pd import numpy as np df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(), 'B': 'one one two three two two one three'.split(), 'C': np.arange(8), 'D': np.arange(8) * 2})
Pour sélectionner les lignes où « A » est égal 'foo' :
print(df.loc[df['A'] == 'foo'])
Rendements :
A B C D 0 foo one 0 0 2 foo two 2 4 4 foo two 4 8 6 foo one 6 12 7 foo three 7 14
Optimisation pour la sélection de valeurs multiples
Pour sélectionner des lignes en fonction de plusieurs valeurs, il est plus efficace pour créer un index et utiliser .loc avec df.index.isin. Cela évite plusieurs appels à isin, ce qui entraîne des performances améliorées.
df = df.set_index(['B']) print(df.loc[df.index.isin(['one','two'])])
Rendements :
A C D B one foo 0 0 one bar 1 2 one foo 6 12 two foo 2 4 two foo 4 8 two bar 5 10
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!