web-dev-qa-db-ja.com

pandas dfをcsvに書き込むときのUnicodeエンコードエラー

400個のExcelファイルを削除し、pythonを使用してpandasに読み込み、すべての生データを1つの大きなdfに追加しました。

それからcsvにエクスポートしようとすると:

df.to_csv("path",header=True,index=False)

私はこのエラーを受け取ります:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xc7' in position 20: ordinal not in range(128)

誰かがこれを修正する方法とその意味を提案できますか?

ありがとう

27
I am not George

DataFrameにunicode値があります。ファイルにはバイトが格納されます。つまり、すべてのunicodeは、ファイルに格納する前にバイトにエンコードする必要があります。 utf-8などのエンコーディングを指定する必要があります。例えば、

df.to_csv('path', header=True, index=False, encoding='utf-8')

エンコーディングを指定しない場合、df.to_csvで使用されるエンコーディングは、Python2ではasciiに、Python3ではutf-8にデフォルト設定されます。

59
unutbu

後でそれをグーグルで検索するのに役立つ答えを追加する:

私を助けた1つのトリックは、最初に問題のあるシリーズをエンコードし、次にそれをutf-8にデコードして戻すことです。のような:

df['crumbs'] = df['crumbs'].map(lambda x: x.encode('unicode-escape').decode('utf-8'))

これにより、データフレームも正しく印刷されます。

10
tangfucius