J'essaie de combiner plusieurs fichiers CSV en une avec cette fonction: mais je reçois cette erreur:
"utf-8 'codec ne peut pas décoder octet 0xb5 en position 0: octet de démarrage non valide p> et voici la trace: p> Merci. p> p>
5 Réponses :
Tout d'abord, vous devez connaître le type d'encodage que vos fichiers CSV utilisent. Vous pouvez essayer d'utiliser Chardet: le détecteur de codage de caractères universel pour prédire le type de codage utilisé dans votre fichier CSV . Chardet peut être facilement installé à l'aide de: Après avoir installé Chardet, vous pouvez utiliser la ligne de commande pour prédire le codage de votre fichier CSV à l'aide de: P> df = pd.read_csv(filename, index_col=None, header=0, encoding='utf-8')
La fonction Open () ne comprend pas le codage du fichier - il utilise le codage par défaut configuré pour Python, ce qui est dans ce cas UTF-8. Tout fichier i> que vous ouvrez dira "utf-8 ', mais si ce n'est pas vrai, il y aura une exception une fois que vous essayez de lire le fichier. Essayez-le - ouvrez du fichier binaire comme ça et voyez ce qui se passe.
@Yoavkleinberger merci pour l'information. Je l'ai édité en ajoutant un moyen de prédire le codage du fichier CSV.
Chardet Code> n'est pas entré fiable, il utilise des heuristiques et n'examine pas l'ensemble du fichier d'entrée.
@tripleee a accepté. Il peut simplement prédire avec une confiance. Donc, je ne m'attends pas à ce qu'il soit précis à 100%. Autre que d'utiliser Chardet, nous devrions vérifier tous les codages possibles manuellement jusqu'à ce que nous trouvions un qui fonctionne. J'aimerais connaître une solution robuste au cas où vous en auriez un.
Il n'y a aucun moyen de connaître le codage à moins que vous sachiez également ce qu'il est censé représenter. Voir par exemple Stackoverflow.com/questions/27832597/... < / a> a une réponse de la mine qui implémente la boucle que vous proposez, bien que dans un contexte légèrement différent.
UTF-8 a déjà été exclu par le message d'erreur de l'OP. Googling for Duplicates me fait toutes sortes de suppositions improbables, parmi lesquelles GB2312 (un codage multi-octets chinois).
J'essayerais:
pd.read_csv(filename, index_col=None, header=0, encoding='utf-8') #OR pd.read_csv(filename, index_col=None, header=0, encoding='latin1')
Essayez de spécifier ceci: p>
Le codage Sinon, vous devrez savoir ce qui codant pour utiliser les fichiers CSV. Vous pouvez simplement essayer beaucoup de codages différents jusqu'à ce que la réponse semble bien. P> df = pd.read_csv (nom de fichier, index_col = aucun, en-tête = 0, codage = 'latin-1') code> p> P>
latin-1 code> est magique - il ne manque jamais. Voyez ce que vous obtenez.
Si cela est assez bon - bien vous y allez. P>
Le problème avec c'est qu'il semble qu'il réussit même si les résultats sont complètement faux.
@tripleee vous êtes correct, peut-être que je n'étais pas assez clair dans la façon dont j'ai décrit ma suggestion. Il est censé être un travail autour, pas une vraie solution
Comme je peux voir, il y a déjà de nombreuses réponses à coder par Pandas.
Voici une approche alternative: p>
with open(file_source, encoding="utf8", errors='ignore') as file: # Your code goes here
Je ne pense pas à essayer d'ouvrir comme UTF-8 et d'ignorer les erreurs est le bon moyen de le faire, car il pourrait ne pas être utf-8 du tout. En outre, OP voulait utiliser des pandas.
Oui, vous êtes correct .. Maintenant, j'ai modifié ma réponse, car c'est une solution alternative. Cela pourrait être utile pour les autres qui n'utilisent pas de pandas.
Cela a fonctionné pour moi
On dirait que votre fichier n'est pas
utf-8 code>. Vous devriez savoir dans lequel le codage a été sauvegardé et décoder. Ou peut-être que ce n'est pas un fichier texte du tout ...
En fait, ce n'est pas un fichier texte, il ne contient que des données numériques.
Nous ne pouvons pas vous dire le codage correct sans voir (un représentant, idéalement un petit échantillon de) le contenu réel des données dans une représentation sans ambiguïté; Un vidage hexagonal des octets problématiques avec quelques octets de contexte Aon, chaque côté est souvent suffisant, surtout si vous pouvez nous dire ce que vous pensez que ces octets sont suppressés à représenter. Voir aussi meta.stackoverflow.com/questions/379403 / ...
Tripleee.github.io/8bit/#b5 montre 25 interprétations possibles de cette valeur d'octet dans Différents codages 8 bits, mais aucun d'entre eux ne semble particulièrement probable ou utile.