Maison  >  Article  >  développement back-end  >  Comment puis-je optimiser la fusion de DataFrame avec des contraintes de date à l'aide de SQL ?

Comment puis-je optimiser la fusion de DataFrame avec des contraintes de date à l'aide de SQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 11:13:021004parcourir

How Can I Optimize DataFrame Merging with Date Constraints Using SQL?

Fusion de dataframes avec des contraintes de date

Introduction :

La fusion de dataframes en fonction d'une condition de jointure et de contraintes de date peut être un tâche courante dans l’analyse des données. Bien que pandas propose diverses options de fusion, l'optimisation des performances en filtrant pendant le processus de fusion peut être avantageuse pour éviter de gérer de grandes trames de données intermédiaires. Cet article traite d'une approche alternative utilisant SQL pour atteindre cette efficacité.

Fusion avec filtrage :

L'extrait de code fourni montre la fusion de deux trames de données A et B à l'aide du pd. fonction merge() et filtrer ensuite les résultats en fonction de la condition de date. Cependant, cette approche peut s'avérer sous-optimale lorsque vous travaillez avec des trames de données volumineuses en raison de la trame de données intermédiaire créée avant le filtrage.

SQL comme alternative :

SQL offre un moyen plus efficace pour effectuer cette fusion avec filtrage au sein de la requête elle-même. En nous connectant à une base de données en mémoire, nous pouvons écrire une requête qui effectue le filtrage des jointures et des dates en une seule étape.

Exemple de code :

Le code suivant démontre l'approche SQL :

<code class="python">import pandas as pd
import sqlite3

# Connect to in-memory database
conn = sqlite3.connect(':memory:')

# Write dataframes to tables
terms.to_sql('terms', conn, index=False)
presidents.to_sql('presidents', conn, index=False)
war_declarations.to_sql('wars', conn, index=False)

# SQL query
qry = '''
    select  
        start_date PresTermStart,
        end_date PresTermEnd,
        wars.date WarStart,
        presidents.name Pres
    from
        terms join wars on
        date between start_date and end_date join presidents on
        terms.president_id = presidents.president_id
    '''

# Read SQL query results into dataframe
df = pd.read_sql_query(qry, conn)</code>

Résultats :

La trame de données résultante df contient les lignes où les dates dans A correspondent aux conditions de date dans B. Dans cet exemple spécifique , elle renvoie les présidents et les mandats au cours desquels deux guerres ont été déclarées.

Avantages :

Cette approche offre les avantages suivants :

  • Efficacité : Effectue la jointure et le filtrage en une seule requête, éliminant ainsi le besoin d'une trame de données intermédiaire.
  • Flexibilité : Permet des conditions de filtrage plus complexes dans la requête SQL .
  • Aucune trame de données intermédiaire : Évite de stocker une trame de données intermédiaire potentiellement volumineuse avant le filtrage.

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:
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