Maison > Article > base de données > Comment sélectionner un sous-ensemble de données dans le style de requête SQL dans Pandas ?
Dans cet article, je vais vous montrer comment utiliser Pandas pour effectuer une analyse de données avec un filtrage de style SQL. La plupart des données d'entreprise sont stockées dans des bases de données qui nécessitent la récupération et la manipulation de SQL. Par exemple, des entreprises comme Oracle, IBM, Microsoft disposent de leurs propres bases de données et de leurs propres implémentations SQL.
Les data scientists doivent gérer SQL à un moment donné de leur carrière car les données ne sont pas toujours stockées dans des fichiers CSV. Personnellement, je préfère utiliser Oracle car la plupart des données de mon entreprise sont stockées dans Oracle.
Scénario – 1 Disons que nous avons pour tâche de trouver tous les films de notre ensemble de données de films qui répondent aux critères suivants.
SELECT FROM WHERE title AS movie_title ,original_language AS movie_language ,popularityAS movie_popularity ,statusAS movie_status ,vote_count AS movie_vote_count movies_data original_languageIN ('en', 'es') AND status=('Released') AND popularitybetween 500 AND 1000 AND vote_count > 5000;
Maintenant que vous avez vu l'instruction SQL qui répond à vos besoins, procédons étape par étape en utilisant des pandas. Je vais vous montrer deux façons.
1. Chargez l'ensemble de données movies_data dans un DataFrame.
import pandas as pd movies = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")
Attribuez une variable à chaque condition.
languages = [ "en" , "es" ] condition_on_languages = movies . original_language . isin ( languages ) condition_on_status = movies . status == "Released" condition_on_popularity = movies . popularity . between ( 500 , 1000 ) condition_on_votecount = movies . vote_count > 5000
3. Combinez toutes les conditions (tableau booléen) ensemble.
final_conditions = ( condition_on_languages & condition_on_status & condition_on_popularity & condition_on_votecount ) columns = [ "title" , "original_language" , "status" , "popularity" , "vote_count" ] # clubbing all together movies . loc [ final_conditions , columns ]
titre | langue_originale | statut | popularité | compte_vote |
---|---|---|---|---|
Étoile 95 | zh
|
Publié | 724.247784 | 10867 |
788 Deadpool | zh
|
Publié | 514.569956 | 10995
|
.query() est une méthode de filtrage des données dans le style de clause SQL Where. Les conditions peuvent être transmises à cette méthode sous forme de chaînes, cependant, les noms de colonnes ne doivent contenir aucun espace.
S'il y a des espaces dans les noms de colonnes, utilisez la fonction python replace pour les remplacer par des traits de soulignement.
D'après mon expérience, j'ai découvert que la méthode query() est plus rapide que les méthodes précédentes lorsqu'elle est appliquée à des DataFrames plus grands.
import pandas as pd movies = pd . read_csv ( "https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv" )
4. Créez la chaîne de requête et exécutez la méthode.
Veuillez noter que la méthode .query ne fonctionne pas avec les chaînes entre guillemets triples qui s'étendent sur plusieurs lignes.
final_conditions = ( "original_language in ['en','es']" "and status == 'Released' " "and popularity > 500 " "and popularity < 1000" "and vote_count > 5000" ) final_result = movies . query ( final_conditions ) final_result
budget | id | original_lingual | original_title | Popularité | Date de sortie | Revenu | Runtime | st | |
---|---|---|---|---|---|---|---|---|---|
95 | 165000000 | 157336 | zh | interstellaire | 724.247784 | 11 mai 2014 | 675120017 | 169.0 | Relation |
788 | 5 8000000 | 293660zh | die Waiter | 514.569956 p> | 2 septembre 2016 | 783112979 | 108.0 | Relation |
Vous pouvez également créer par programme des valeurs sous forme de listes Python et les utiliser avec (@).
movie_languages = [ 'en' , 'es' ] final_conditions = ( "original_language in @movie_languages " "and status == 'Released' " "and popularity > 500 " "and popularity < 1000" "and vote_count > 5000" ) final_result = movies . query ( final_conditions ) final_result
budget | id | original_langue | original_title | PopularitéDate de sortie | Revenu |
| Durée d'exécutionst | ||
---|---|---|---|---|---|---|---|---|---|
95 | 165000000157336 | zh |
interstellaire |
724.247784 |
2014 11 mai 000000 | 293660 |
zh |
Deadpool |
514.569956 |
2 septembre 2016 783112979 |
108.0 |
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!