1. ホーム
  2. python

[解決済み] PandasとPythonでCSVファイルを読み込むとUnicodeDecodeErrorが発生する。

2022-03-17 01:13:50

質問

30,000個の類似ファイルを処理するプログラムを実行しています。そのうちのランダムな数のファイルが停止し、このエラーを発生させています。

File "C:\Importer\src\dfman\importer.py", line 26, in import_chr
     data = pd.read_csv(filepath, names=fields)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 400, in parser_f
     return _read(filepath_or_buffer, kwds)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 205, in _read
     return parser.read()
   File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 608, in read
     ret = self._engine.read(nrows)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 1028, in read
     data = self._reader.read(nrows)
File "parser.pyx", line 706, in pandas.parser.TextReader.read (pandas\parser.c:6745)
File "parser.pyx", line 728, in pandas.parser.TextReader._read_low_memory (pandas\parser.c:6964)
File "parser.pyx", line 804, in pandas.parser.TextReader._read_rows (pandas\parser.c:7780)
File "parser.pyx", line 890, in pandas.parser.TextReader._convert_column_data (pandas\parser.c:8793)
File "parser.pyx", line 950, in pandas.parser.TextReader._convert_tokens (pandas\parser.c:9484)
File "parser.pyx", line 1026, in pandas.parser.TextReader._convert_with_dtype (pandas\parser.c:10642)
File "parser.pyx", line 1046, in pandas.parser.TextReader._string_convert (pandas\parser.c:10853)
File "parser.pyx", line 1278, in pandas.parser._string_box_utf8 (pandas\parser.c:15657)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xda in position 6: invalid    continuation byte

これらのファイルのソース/作成元はすべて同じ場所です。これを修正してインポートを進めるには、どのような方法があるのでしょうか?

解決方法は?

read_csvencoding オプションで、異なるフォーマットのファイルを扱うことができます。私は主に read_csv('file', encoding = "ISO-8859-1") または、代わりに encoding = "utf-8" は読書用、一般的には utf-8 のために to_csv .

また、いくつかの alias のようなオプションがあります。 'latin' または 'cp1252' (Windows)の代わりに 'ISO-8859-1' (参照 Pythonドキュメント また、他の多くのエンコーディングについても同様です)。

参照 Pandasの関連ドキュメント , csv ファイルに関する Python ドキュメントの例 また、関連する質問はSOにたくさんあります。背景となる良いリソースは ユニコードと文字セットについて開発者が知っておくべきこと .

エンコーディングを検出するには(ファイルに非アスキー文字が含まれていると仮定して)、次のようにします。 enca (参照 マンページ ) または file -i (リナックス)または file -I (osx) ( マンページ ).