私はPython pandas=で結果を書き出すのに問題があります。データをCSVファイルとして読み込み、エクスポートしています。各スクリプトは、正常に動作する独自のCSVファイルです。最近、すべてを1つのExcelファイルでワークシートといくつかのシートでエクスポートしようとしてエラーが発生しましたが、
「 'utf8'コーデックは位置1のバイト0xe9をデコードできません:無効な継続バイト」
Excelへのエクスポートで問題が発生する可能性のある文字を見つけ出す方法すらわかりません。なぜそれがうまくCSVにエクスポートするのか分かりませんが:(
関連する行
from pandas import ExcelWriter
data = pd.read_csv(input)
writer = ExcelWriter(output) #output is just the filename
fundraisers.to_Excel(writer, "fundraisers")
locations.to_Excel(writer, "locations") #error
locations.to_csv(outputcsv) #works
writer.save()
問題のあるデータフレームの印刷ヘッド
Event ID Constituent ID Email Address First Name \ Last Name
f 1 A A 1
F 4 L R C
M 1 1 A D
F 4 A A G
M 2 0 R G
M 3 O O H
M 2 T E H
M 2 A A H
M 2 M M K
F 3 J E K
Location ID raised raised con raised email
a 0 0 0
a 8 0 0
o 0 0 0
o 0 0 0
o 0 0 0
t 5 0 0
o 1 0 0
o 6 a 0
o 6 0 0
d 0 0 0
excelシートを見ると、実際には部分的に印刷されています。名列以降は空白ですが、イベント、構成要素、および電子メールはすべて印刷されます。
編集:utf8としてcsvを読み込もうとすると失敗しますが、latin1としては読み込めます。 to_Excelエンコーディングを指定する方法はありますか?または、データフレームをutf8にデコードおよびエンコードしますか?
これを解決できました。
文字列を含む列を通過する関数を作成し、それらをutf8にデコード/エンコードすることができました。
def changeencode(data, cols):
for col in cols:
data[col] = data[col].str.decode('iso-8859-1').str.encode('utf-8')
return data
私の場合、問題は、最初は読み取りエンコードが間違っているCSVファイル(cp1252
の代わりにASCII
)だったことです。したがって、pandas=がExcelファイルに書き込もうとすると、デコードできない文字が見つかりました。
CSVファイルを読み込むときに正しいエンコードを指定することで解決しました。
data = pd.read_csv(fname, encoding='cp1252')
実際、ExcelWriterにパラメーターを渡すことでutf8エンコードを強制する方法があります。
ew = pandas.ExcelWriter('test.xlsx',options={'encoding':'utf-8'})
sampleList = ['Miño', '1', '2', 'señora']
dataframe = pandas.DataFrame(sampleList)
dataframe.to_Excel(ew)
ew.save()
最も簡単なことは、utf-8でデータフレームをロードすることです。その後、ExcelWriterは問題なく保存します。
data = pd.read_csv(path,encoding='utf-8')
いつリリースされるのかわかりませんが、私のgithubリポジトリで試すことができます:
https://github.com/jtornero/pandas
クローンを作成して、ソースからpandasをビルドできます。問題はほぼ解決されており、次のように機能します。
sampleList = ['Miño', '1', '2', 'señora']
dataframe = pandas.DataFrame(sampleList)
ew = pandas.ExcelWriter('./test.xls', encoding='utf-8')
dataframe.to_Excel(ew)
ew.save()
乾杯
ホルヘ・トルネロ
@Zenadixが言ったことと同様に、csvをUTF-8として読み込むことにより、ExcelWriterはエラーなしで書き込むことができました。
df = pd.read_csv('path', encoding='utf-8')
...
with pd.ExcelWriter('new_path') as writer:
df.to_Excel(writer, sheet_name='Foo')