Filtrer un gros fichier CSV avec Python

Katie - Jan 8 '19 - - Dev Community

Le problème avec de gros fichiers en Excel, ce n’est pas généralement la taille de vos fichiers. C’est que Excel essaie de vous montrer tous ses calculs. Considérez donc un langage de programmation tel que Python pour modifier de gros fichiers CSV et XLSX, comme les exportations de vos tableaux Salesforce comme “Tâche” et “Contact.”

Pourquoi Excel est lent avec de gros fichiers

Si vous travaillez avec de gros feuilles de calcul, vous avez peut-être vu un fichier si gros qu’il qui bloque votre ordinateur quand vous essayez de le filtrer et de supprimer certaines enregistrements.

Téléchargez, par exemple, le fichier 100000 Sales Records - 3,54 Mo du site “E for Excel.”

  1. Ouvrez-le avec Excel.
  2. Filtrez-le sur “Country” pour ne montrer que les pays “Algeria,” “Armenia,” “Australia,” et “Barbados.”
  3. Selectionnez toutes les lignes visibles.
  4. Faites un clic droit sur un numéro à gauche et supprimez les lignes.

Il vous faut quelques secondes, n’est-ce pas ? Moi j’ai un bon ordi de 2017 avec un processeur à 4 coeurs 3.50GHz et 16 Go de RAM, et Excel était bloqué pendant 6 secondes.

Ce délai ne s’agit pas de la tâche de supprimer toutes ces enregistrements.

Par contre, il s’agit de la tâche de redessiner le feuille de calcul sur votre écran.

Python peut modifier les gros fichiers plus vite

Parce que les logiciels sans interface graphique peuvent faire leur travail sans devoir vous montrer ce qu’ils font, un peu de code Python peut faire la même opération en moins d’un dixième de seconde.

Voilà les résultats de ce script Python:

import pandas
import datetime

df = pandas.read_csv('100000 Sales Records.csv')

badcountries = ['Algeria','Armenia','Australia','Barbados']

print('There are ' + str(len(df)) + ' rows in the dataset before deleting the "bad" country rows.')
print('Il y a ' + str(len(df)) + ' enregistrements dans les données avant de supprimer ceux des pays non-désirées.')

print()

t1 = datetime.datetime.now()
df = df[~df['Country'].isin(badcountries)]
t2 = datetime.datetime.now()

tm = round((t2 - t1).total_seconds(), 2)
print('It took ' + str(tm) + ' seconds to delete the "bad" country rows.')
print('Il a fallu ' + str(tm) + ' seconds pour suppprimer les données des pays non-désirées.')

print()

print('There are ' + str(len(df)) + ' rows in the dataset after deleting the "bad" country rows.')
print('Il y a ' + str(len(df)) + ' enregistrements dans les données après avoir supprimé ceux des pays non-désirées.')
There are 100000 rows in the dataset before deleting the "bad" country rows.
Il y a 100000 enregistrements dans les données avant de supprimer ceux des pays non-désirées.

It took 0.08 seconds to delete the "bad" country rows.
Il a fallu 0.08 seconds pour suppprimer les données des pays non-désirées.

There are 97885 rows in the dataset after deleting the "bad" country rows.
Il y a 97885 enregistrements dans les données après avoir supprimé ceux des pays non-désirées

Il n’est pas nécessaire de choisir le langage Python pour faire de tels calculs, mais il est important de considérer une approche avec du code, pour transformer vos données sans regarder la transformation.

(Mais moi je trouve Python un langage assez simple à apprendre.)

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .