2016-01-27 1 views
0

J'ai plus de 1 million de lignes, et il y a un très long champ de texte qui déséquilibre certaines lignes. Cela provoque certaines lignes d'avoir plus de colonnes que mon en-tête. J'ai corrigé ceci avec:Lire des csv avec des pandas - gérer des lignes déséquilibrées

read_csv('filename.csv', error_bad_lines=False) 

Le problème ici est qu'il semble qu'il y ait quelques rangées avec moins de colonnes que mon en-tête. Ceci est un problème (certains champs changent).

Comment puis-je résoudre ce problème? Existe-t-il un moyen (je blâme ce long champ de texte) d'agir comme un seul domaine?


modifier après commentaire

Délimiteur de champ est une virgule. Lorsque je cours df.dtypes tous les champs, sauf un semble être objet, mais j'ai à l'origine des champs int, et datetime, lus comme des objets par les pandas.


modifier après commentaire 2

ici est en-tête pour ce que j'ai .csv id (int), textField (string), ID2 (char), le score (int), le type (string) , length (int), nom (chaîne), datetime (datetime), taille (int), email (chaîne)

Le principal problème est la zone textField. les autres ne peuvent pas avoir de charactères pour fuir la syntaxe csv. Cependant textField est créé par les utilisateurs, il peut être n'importe quoi dans unicode; emojis, caractères non anglais drôle citation etc.

+1

sont vos champs délimités et si oui, quel est le format? – EdChum

+0

réf. Mise à jour question –

+0

Veuillez montrer un petit échantillon de vos données illustrant le problème. – BrenBarn

Répondre

1

Le problème principal est textField zone. les autres ne peuvent pas avoir des caractères de type pour fuir la syntaxe csv. Cependant textField est créé par utilisateurs, il peut être n'importe quoi dans unicode; emojis, drôle non anglais caractères citation etc.

Le textField doit être entouré de guillemets doubles, et une citation à l'intérieur ce domaine doit être échappé avec une autre citation.

Étant donné que ce champ peut contenir n'importe quel caractère, il est probable que certains de ces champs soient multilignes, ce qui expliquerait également pourquoi certaines lignes ont moins de colonnes alors que les autres données semblent être valides. Par conséquent, assurez-vous que votre analyseur prend en charge et est configuré pour utiliser multiligne. Mais cela ne fonctionnera que si ces champs sont correctement cités.

+0

Merci pour votre réponse, j'ai enquêté sur quelques échantillons, c'est exactement le cas. J'ai pu exporter mon ensemble de données dans json, donc j'ai résolu mon problème, mais la question demeure. –

+0

@BediE - Voulez-vous dire que vous étiez en train de créer le fichier csv? Dans ce cas, le fait de citer les champs (ou au moins 'textField') et d'échapper les guillemets à l'intérieur devrait résoudre le problème, tant que l'analyseur peut gérer des champs multilignes. –

+0

Non! Je n'ai pas créé.csv moi-même. Je l'exporte d'une base de données où ce champ est un champs de texte multilingue. Je l'ai vérifié, je ne sais pas où il est géré, mais je vois des cas où certains champs sont entourés de guillemets doubles, et je suis à peu près sûr que certaines lignes contiennent des "s qui causent un devis déséquilibré. –