J'utilise des pandas pour faire un Je le fais en utilisant un simple externe code> fusionner sur un ensemble d'environ ~ 1000-2000 fichiers CSV. Chaque fichier CSV a une colonne d'identifiant ID code> qui est partagée entre tous les fichiers CSV, mais chaque fichier a un ensemble unique de colonnes de 3-5 colonnes. Il y a environ 20 000 lignes code> ID code> dans chaque fichier. Tout ce que je veux faire, c'est de la fusionner ensemble, apportant toutes les nouvelles colonnes ensemble et à l'aide de la colonne ID code> comme indice de fusion. Fusionner code> Call: P> merged_df = first_df # first csv file dataframe
for next_filename in filenames:
# load up the next df
# ...
merged_df = merged_df.merge(next_df, on=["id"], how="outer")
3 Réponses :
Je pense que vous aurez une meilleure performance en utilisant un cela signifie que vous ne faites qu'une seule opération de fusion plutôt que pour chaque fichier. em> p> p> concat code> (qui agit comme une jointure extérieure):
À la mémoire de la mémoire, vous devriez pouvoir utiliser une expression générale au lieu de la compréhension de la liste ... (pas sûr du fonctionnement interne du concat code> si)
@ @root Eh bien, le générateur ne peut être que mieux que je pense (le pire cas qu'il convertit à une liste) :)
@root Bon spot BTW! (TBH je ne savais pas que Concat accepterait un générateur!)
Eh bien, je l'ai déjà vérifié avant de commenter: P; Il n'est pas mentionné dans les documents que je pense ...
@Andyhayden: Solution brillante, travaux, merci! Pourriez-vous expliquer pourquoi cela fonctionne mieux cependant? S'agit-il que chaque individu se fusionne de mémoire qui ne soit pas des ordures recueillies à temps, puis vous manquez de mémoire?
@ user248237dfsf Eh bien, la principale chose est que vous faites beaucoup plus d'opérations de fusion, et elle ne construit également que un i> dataframe (encore une fois c'est une opération coûteuse). Je me demande s'il y a un bug de fuite, je ne vois pas pourquoi il devrait manquer de mémoire ... (Je vois pourquoi ce serait beaucoup plus lent).
@ user248237dfsf Il peut être utile de poster cet aspect comme un >
J'ai rencontré la même erreur en pytwhen 32 bits en utilisant read_csv avec fichier 1 Go. Essayez la version 64 bits et j'espère résoudre un problème d'erreur de mémoire p>
Cependant, il faut faire attention car cette fonction n'est pas une jointure mais plutôt une annexe horizontale tandis que les indices sont ignorés P> P> pd.concat code> semble être à court de mémoire pour les grands dataframes, une option consiste à convertir les DFS en matrices et concatez-les.