web-dev-qa-db-fra.com

Chargement de plusieurs fichiers csv d'un dossier dans une même trame de données

j'ai plusieurs fichiers csv enregistrés dans un dossier avec la même disposition de colonne et je veux le charger dans python comme un dataframe dans pandas.

La question est vraiment similaire à cela thread.

J'utilise le code suivant:

import glob
import pandas as pd
salesdata = pd.DataFrame()
for f in glob.glob("TransactionData\Promorelevant\*.csv"):
    appenddata = pd.read_csv(f, header=None, sep=";")
    salesdata = salesdata.append(appenddata,ignore_index=True)

Existe-t-il une meilleure solution avec un autre package?

Cela prend trop de temps.

Merci

6
PV8

Je suggère d'utiliser la compréhension de la liste avec concat :

import glob
import pandas as pd

files = glob.glob("TransactionData\Promorelevant*.csv")
dfs = [pd.read_csv(f, header=None, sep=";") for f in files]

salesdata = pd.concat(dfs,ignore_index=True)
2
jezrael

Peut-être que l'utilisation de bash sera plus rapide:

head -n 1 "TransactionData/Promorelevant/0.csv" > merged.csv
tail -q -n +2 TransactionData/Promorelevant*.csv >> merged.csv

Ou si vous utilisez depuis un ordinateur portable jupyter

!head -n 1 "TransactionData/Promorelevant/0.csv" > merged.csv
!tail -q -n +2 "TransactionData/Promorelevant*.csv" >> merged.csv

L'idée étant que vous n'aurez rien à analyser.

La première commande copie l'en-tête de l'un des fichiers. Vous pouvez sauter cette ligne si vous n'avez pas d'en-tête. Tail ignore les en-têtes de tous les fichiers et les ajoute au fichier csv.

Ajouter en Python est probablement plus cher.

Bien sûr, assurez-vous que votre analyse est toujours valide en utilisant des pandas.

pd.read_csv("merged.csv")

Curieux de connaître votre référence.

1
PascalVKooten

j'ai vérifié toutes ces approches sauf celle bash avec la fonction time (une seule exécution, et notez également que les fichiers sont sur un lecteur partagé).

Voici les résultats:

Mon approche: 1220.49

Comphrension de liste + concat: 1135.53

concat + map + join: 1116.31

Je vais opter pour la liste comphrension + concat qui me fera gagner quelques minutes et je me sens assez familier avec.

Merci pour vos idées.

0
PV8

Avec l'aide de lien vers la réponse réelle

Cela semble être le meilleur revêtement:

import glob, os    
df = pd.concat(map(pd.read_csv, glob.glob(os.path.join('', "*.csv"))))
0
Muhammad Haseeb