-2
votes

Supprimer des doublons d'un grand fichier CSV

J'ai un grand CSV autour de 24 millions de rangées et je veux couper en taille.

Voici un petit aperçu d'un CSV:

 Entrez la description de l'image ici

Je veux supprimer les rangées qui ont le même CIK et IP, car j'ai un tas de ces fichiers et qu'ils prennent beaucoup d'espace, je veux donc faire un moyen efficace de supprimer les doublons.

J'ai fait tester combien de doublons de Cik y a-t-il et, pour certains, il y a plus de 100 000, c'est pourquoi je veux réduire ces doublons.

J'ai essayé des choses mais dans la plupart des cas, il a échoué, à cause de la taille de la CSV.


7 commentaires

Que voulez-vous dire par il a échoué ? Le programme crash ou vous obtenez-t-il une sorte d'erreur?


Combien de doublons avez-vous par CIK / IP ?


Les programmes ne fonctionnent pas, j'ai des erreurs, mais quand je les ai réparées, le programme ne fonctionnait tout simplement pas, sa juste boucle à l'infini, c'est pourquoi j'ai posté pour que je puisse avoir une suggestion sur la façon de faire comment le faire


J'ai fait un script de test pour compter le nombre de personnes identiques et pour certains, de plus de 100k, c'est la raison d'enlever certains d'entre eux


Êtes-vous en mesure de la lire avec succès dans des pandas alors la baisse de l'opération Drop_duplicates? Ou vous ne pouvez pas créer de DF avec succès?


Pouvez-vous publier ce que vous avez déjà essayé de voir pourquoi il boucle à l'infini?


Je n'ai pas utilisé de pandas, mais je vais essayer, car cela ne semble que la solution suggérée


3 Réponses :


0
votes

Vous pouvez effectuer ce qui suit: xxx

et profiter de votre CSV sans les duplicats.


1 commentaires

Je ne sais pas que les pandas vont travailler, à cause de la taille de la CSV



1
votes

Voici un exemple en utilisant Pandas et Réduire : xxx

ceci évite d'ouvrir l'ensemble du fichier à la fois (ouverture en 100000 des morceaux de ligne à la place) et laissent tomber des doublons comme ça va.


3 commentaires

Je pense que c'est une bonne solution, je vais l'essayer, merci @pmende


Je reçois cette erreur lorsque vous essayez de l'exécuter: "SYS: 1: Dtypewarning: colonnes (14) ont des types mixtes. Spécifiez DTYPE Option sur Importer ou définir LOW_MEMORY = FAUX."


@StEfan Si vous connaissez les types de toutes vos colonnes, vous pouvez les spécifier dans l'appel à pd.read_csv (voir Documents: Pandas.pydata.org/pandas-Docs/stable/reference/api/... ) en passant un DICT au paramètre dtype . Par exemple, vous pouvez dire quelque chose comme: dtypes = {"ip": "str", "date": "str", } . Ensuite, dans l'appel READ_CSV , vous devez simplement ajouter le paramètre DTYPE = DTYPES . Généralement, vous pouvez ignorer le dtypewarning et Pandas fait un bon travail d'inférence quels types à utiliser.



4
votes

Un autre moyen rapide est de le faire avec awk , en cours d'exécution à partir de la ligne de commande: xxx

fichier.csv est le Nom de votre fichier et File_uniq.csv est l'endroit où vous souhaitez que vos enregistrements déduplisés (1 $ et 5 $ sont des numéros de colonne, 1 pour IP et 5 pour cik )

ps Vous devriez avoir awk si vous êtes sur un Linux / Mac, mais peut avoir besoin de le télécharger séparément sur Windows


3 commentaires

AWK est vraiment une bonne option et sera presque certainement des pandas.


Bien que ce soit hors sujet, mais la réponse brillante et a aidé à trier mon problème


Merci pour ça. Je traite également un gros fichier (plus de 4 Go) sur un bélier de 32 Go, mais il a été tué. Awk m'a sauvé.