MemoryError quand j'ai fusionner les deux Pandas trames de données
J'ai cherché presque partout sur l'internet et en quelque sorte, aucune des approches semblent fonctionner dans mon cas.
J'ai deux gros fichiers csv (avec chacun un million de+ lignes et environ 300-400 MO taille). Ils sont de chargement fine dans des trames de données à l'aide de la read_csv fonction sans avoir à utiliser la chunksize paramètre.
J'ai même effectué certaines opérations mineures sur ces données, comme la nouvelle génération de colonnes, filtrage, etc.
Cependant, lorsque j'essaie de fusionner ces deux images, je reçois un MemoryError. J'ai même essayé d'utiliser SQLite pour accomplir la fusion, mais en vain. L'opération prend une éternité.
Le mien est un PC Windows 7 avec 8 go de RAM. La version de Python est de 2,7
Merci.
Edit: j'ai essayé de segmentation des méthodes de trop. Quand je fais cela, je n'ai pas MemoryError, mais l'utilisation de la RAM explose et mon système se bloque.
merge_df = pandas.de fusion(df1, df2, left_on = "Colname1", right_on = "Colname2")
Vous utilisez une version 64 bits de Python?
Oui. Je suis aide d'une version 64 bits de Python 2.7. Actuellement, Anaconda 4.3 (avec la Spyder 3) est installé sur mon système.
Pourriez-vous collez les premières lignes de chaque dataframe? Les Chances sont, vous êtes en train de faire une fusion qui est différente de l'opération que vous le souhaitez. (À partir de mon expérience, la plupart des opérations de jointure impliquant dataframes moins de 1 go de terminer dans une échelle de temps de quelques secondes, mais bien sûr, cela dépend du type de jointure ainsi que la structure des données.)
OriginalL'auteur Ronit Chidara | 2017-11-20
Vous devez vous connecter pour publier un commentaire.
Lorsque vous fusionnez les données à l'aide de pandas.de fusion, il va utiliser le df1 mémoire, df2 mémoire et merge_df de la mémoire. Je crois que c'est pourquoi vous obtenez une erreur de mémoire. Vous devez l'exporter df2 vers un fichier csv et l'utilisation chunksize option et de fusion de données.
Il pourrait être une meilleure façon, mais vous pouvez l'essayer.
*pour grand ensemble de données, vous pouvez utiliser chunksize option dans les pandas.read_csv
cela permettra de sauver les données fusionnées comme df3.
Oui, si tu veux faire une jointure interne, vous n'avez pas besoin de faire # enregistrer des données qui n'apparaissent que dans le df1 df_result = df1[df1.Colname1.isin(df2.Colname2)!=True] df_result.to_csv("df3.csv",index_label=False, mode="a")
Je pense que la déclaration de créer le df2.csv fichier est manquant.
Je suis désolé, vous avez juste besoin de besoin de charger "yourdata2.csv" avec chunksize option
1.Avant l'exécution de la boucle, vous avez libéré tous les inutiles objet à l'aide de del(objet)? 2. si oui, pourrait tu essayer de le faire en quelques lignes de df2 et toutes les lignes de df1?*juste au cas où vous joignez avec le bon de ligne et de vérifier le résultat est comme prévu.
OriginalL'auteur T_cat