2016-05-11 19 views
2

私はdf.to_csv()を使用して、データフレームをcsvファイルに変換しました。 Python 3の下では、pandas docはデフォルトでutf-8エンコーディングを指定しています。 encoding="ISO-8859-1"作品でパンダのデータフレームを含むcsvファイルを読み取るときのエンコーディングエラー

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xae in position 8: invalid start byte 

しかしpd.read_csv()を使用して:私は、同じファイル上pd.read_csv()を実行すると

はしかし、私はエラーを取得します。

ここでの問題点とその解決方法は、一貫性のあるエンコードでファイルを書き込んで読み込むことができますか?

+0

この問題を再現するサンプルデータフレームを提供できますか? –

+0

@ TadhgMcDonald-Jensenできませんが、同じソースから他のデータセットを使用して作成したデータフレームに問題は一貫しています。 – user113531

答えて

2

オリジナルの.csvは、たとえばencodedです。 ISO-8859-1。それはUnicodeDecodeErrorです - python/pandasはdecodeのソースを使用していますutf-8コーデックを使用してデフォルトではソースはunicodeです。

デフォルト以外のソースコードを指定すると、pandasは適切なコーデックを使用してソースと一致させ、内部で使用されるフォーマットにデコードします。

python docs以上hereを参照してください。 Also very good.

+0

'utf-8'で元のファイルを読み込み中にエラーが発生しなかったので、' ISO-8859-1'を使って読み込もうとしませんでした。元のファイルを読み込んでディスクに書き込めたにもかかわらずエラーが発生する可能性がありますか? – user113531

+0

あなたはこれがうまくいくと思います。あなたのファイルが 'utf8'でエンコードされていて、Python 3が実際にはデフォルトである場合は、問題なく読み込むことができます。これは、通常、間違いなく、エラーメッセージを解釈することができます、エラーを再現できるようにファイルとプロセスについての詳細を必要とするでしょう。 – Stefan

+0

最終的に問題を解決できましたか? – Stefan

0

ここでは、pandas.to_csvで明示的にencodingパラメータを使用していないときに、未知の(?)エンコードを使用するパンダの具体的な例を示します。

0x92は、明示的にパンダのドキュメントは、それがデフォルトでこれを使用していると言っていてもto_csvencoding="utf-8"を使用する必要がありますようだから、それが見えます(アポストロフィのように見える)「

import pandas 
ERRORFILE = r'written_without_encoding_parameter.csv' 
NO_ERRORFILE = r'written_WITH_encoding_parameter.csv' 

df_dummy = pandas.DataFrame([u"Yo what's up", u"I like your sister’s friend"]) 

df_dummy.to_csv(ERRORFILE) 
df_dummy.to_csv(NO_ERRORFILE, encoding="utf-8") 

df_no_error_with_latin = pandas.read_csv(ERRORFILE, encoding="Latin-1") 
df_no_error = pandas.read_csv(NO_ERRORFILE) 
df_error = pandas.read_csv(ERRORFILE) 
>>> UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 18: invalid start byte 

です。またはencoding="Latin-1"read_csvを使用してください。

さらにイライラ...

df_error_even_with_utf8 = pandas.read_csv(ERRORFILE, encoding="utf-8") 
>>> UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 18: invalid start byte 

私は、Windows 7、Pythonの3.5、パンダ0.19.2時点を使用しています。

+0

同じ問題を抱えていて、Excelのdfをcsvに変換しました。後でcsvを読み込もうとしましたが、無効な開始バイトである 'utf-8'エラーが発生しました。 encoding = "ISO-8859-1"でpd.read_csv()を使用すると、その理由がわかりません。多分Python 3.6のバグでしょうか? –

関連する問題