Comparaison de deux DataFrame - performance de résultat

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous,

Je dois faire des comparaisons entre deux dataframe contenant respectivement 1200000 et 1800000 de lignes. Pour faire simple (car mon ordi n’est pas une foudre…), j’ai réduis chacun des df à "deux colonnes" j’ai donc DF1 et DF2

j’ai commis un petit script qui charge les fichiers csv, vérifie ce qui est dans DF1 et pas dans DF2, ce qui est dans DF2 et pas dans DF1, et ce qui est en commun. A la suite de quoi, je génère des fichiers csv avec les résultats.

Les valeurs sur lesquelles sont faits les tests sont des chaines Alphanumérique d’une taille max de 60.

Voici le code

import pandas as pd
from datetime import datetime

debut = datetime.now()

DF1 = pd.read_csv('../Datas/DF1.csv', delimiter=',')
DF2 = pd.read_csv('../Datas/DF2.csv', delimiter=',')
DF2['Ref'] = DF2['Ref'].str.lstrip()


# liste des references sur DF2 et pas Sur DF1
DF2_Only = pd.merge(left = DF2, right = DF1, how = 'outer', left_on='Ref', right_on='Ref',\
                  indicator = True).loc[lambda x : x['_merge']=='left_only']

DF2_Only.to_csv('DF1_uniquement.csv', sep=';', index=False, columns=['Ref'])


# Liste des references sur DF1 et pas Sur DF2
DF1_Only = pd.merge(left = DF2, right = DF1, how = 'outer', left_on='Ref', right_on='Ref',\
                  indicator = True).loc[lambda x : x['_merge']=='right_only']

DF1_Only.to_csv('DF1_uniquement.csv', sep=';', index=False, columns=['Ref'])

# Liste des references en commun sur DF1 et DF2
DF1_DF2 = pd.merge(left = DF2, right = DF1, how = 'inner', left_on='Ref', right_on='Ref',\
                  indicator = True)

DF1_DF2.to_csv('Ref_communes.csv', sep=';', index=False, columns=['Ref'])

fin = datetime.now()

duree = (fin - debut).total_seconds()
print(duree, ' secondes')

Les script se termine au bout de 10 secondes. Est-ce que cela vous parait correct et logique. Est-ce qu’il y aurait une autre manière pour accélérer le processus ?

Je vous remercie d’avance. Bonne journée

+0 -0

Salut,

Si tu veux tirer plus de performance en partant de ton script actuel, je te conseille de le profiler, c’est-à-dire déterminer ce qui prend effectivement du temps.

À partir de là, tu seras capable d’imaginer des solutions pour accélérer efficacement le traitement.

Mais sinon, pourquoi veux-tu aller plus vite ? Quel temps d’exécution serait suffisamment faible pour pour ton besoin ? Et quel est ton besoin ?

Bonjour Aabu.

Je n’ai pas vraiment de désire quant au temps d’exécution du script. Il va falloir que je l’applique sur les csv originaux qui font 7000000 et 7500000 de lignes avec une vingtaine de colonnes.

Comme je ne suis pas vraiment un expert de Pandas, je me demandais si ma procédure était correcte, même si elle donne les résultats escomptés, et si en m’y prenant autrement je pourrais accélérer les choses.

+0 -0

Si tu as assez de mémoire tu peux regarder pour passer par le format hdf5 qui permet de directement mettre en mémoire un fichier(très utile en ia car tu as un gain sur les lectures). Sinon vu le nombre de lignes c’est normal si ça prends du temps.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte