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
WBOYavant
2023-08-31 10:13:101178parcourir

如何在 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;

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")

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

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.

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

293660

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

zh

die Waiter

514.569956 p>

2 septembre 2016

783112979

108.0

Relation

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer