Maison > base de données > tutoriel mysql > Comment sélectionner un sous-ensemble de données dans le style de requête SQL dans Pandas ?

Comment sélectionner un sous-ensemble de données dans le style de requête SQL dans Pandas ?

WBOY
Libérer: 2023-08-31 10:13:10
avant
1175 Les gens l'ont consulté

如何在 Pandas 的 SQL 查询样式中选择数据子集?

Introduction

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.

  • La langue du film doit être l'anglais(en) ou l'espagnol(es).
  • La popularité du film doit être comprise entre 500 et 1000.
  • Le statut du film doit être publié.
  • Le nombre de votes doit être supérieur à 5000. Pour le scénario ci-dessus, l'instruction SQL ressemble à ce qui suit.
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;
Copier après la connexion

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.

Méthode 1 : Index booléen

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")
Copier après la connexion

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
Copier après la connexion

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 ]
Copier après la connexion

titre

langue_originale

statut

popularité

compte_vote

< p>
Étoile 95

zh

Publié

724.247784

10867

< /td>

788 Deadpool

zh

Publié

514.569956

10995

Méthode 2 : - Méthode .query(). La méthode

.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. < /p>

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" )
Copier après la connexion

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 [&#39;en&#39;,&#39;es&#39;]"
"and status == &#39;Released&#39; "
"and popularity > 500 "
"and popularity < 1000"
"and vote_count > 5000"
) final_result = movies . query ( final_conditions )
final_result
Copier après la connexion

< td>293660

budget< /p>

id

original_lingual

original_title

Popularité

Date de sortie

Revenu

Runtime

st

95

165000000

157336

zh

interstellaire

724.247784

11 mai 2014< /p>

675120017

169.0

Relation

788

5 8000000

zh

die Waiter

514.569956

2 septembre 2016

783112979

108.0

Relation

< p>et bien d'autres, généralement dans mon Dans mon codage, j'ai plusieurs valeurs ​​pour vérifier ma clause "in". La syntaxe ci-dessus n'est donc pas idéale. Les variables Python peuvent être référencées à l'aide du symbole at (@).

Vous pouvez également créer par programme des valeurs sous forme de listes Python et les utiliser avec (@).

movie_languages = [ &#39;en&#39; , &#39;es&#39; ]
final_conditions = (
"original_language in @movie_languages "
"and status == &#39;Released&#39; "
"and popularity > 500 "
"and popularity < 1000"
"and vote_count > 5000" )
final_result = movies . query ( final_conditions )
final_result
Copier après la connexion

PopularitéDate de sortieRevenu Durée d'exécutionst165000000157336

Relation

budget

id

original_langue

original_title

95

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!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal