J’essaie d’utiliser pandas pour manipuler un fichier .csv mais j’obtiens cette erreur :
pandas.parser.CParserError : Error tokenizing data. Erreur C : Expecté 2 champs dans la ligne 3, vu 12
J'ai essayé de lire la documentation de pandas, mais je n'ai rien trouvé.
Mon code est simple :
path = 'GOOG Key Ratios.csv'
#print(open(path).read())
data = pd.read_csv(path)
Comment puis-je résoudre ce problème ? Dois-je utiliser le module csv
ou un autre langage ?
Le fichier provient de [Morningstar][1].
[1] : http://financials.morningstar.com/ratios/r.html?t=GOOG®ion=usa&culture=fr-US
L'analyseur syntaxique est perturbé par l'en-tête du fichier. Il lit la première ligne et en déduit le nombre de colonnes. Mais les deux premières lignes ne sont pas représentatives des données réelles du fichier.
Essayez-le avec data = pd.read_csv(path, skiprows=2)
.
J'ai rencontré le même problème. L'utilisation de pd.read_table()
sur le même fichier source semblait fonctionner. Je n'ai pas pu en trouver la raison, mais c'était une solution de contournement utile dans mon cas. Peut-être quelqu'un de plus compétent pourra-t-il m'éclairer sur la raison pour laquelle cela a fonctionné.
Modifier : J'ai découvert que cette erreur se produit lorsque votre fichier contient du texte qui n'a pas le même format que les données réelles. Il s'agit généralement d'informations d'en-tête ou de pied de page (plus d'une ligne, donc skip_header ne fonctionne pas) qui ne seront pas séparées par le même nombre de virgules que vos données réelles (lorsque vous utilisez read_csv). L'utilisation de read_table utilise une tabulation comme délimiteur, ce qui pourrait contourner l'erreur actuelle des utilisateurs mais en introduire d'autres.
Je contourne généralement ce problème en lisant les données supplémentaires dans un fichier, puis en utilisant la méthode read_csv().
La solution exacte peut varier en fonction de votre fichier, mais cette approche a fonctionné pour moi dans plusieurs cas.