目标:要将.xlsx文件转换为.csv文件,然后将其读入pandas数据框。 ( pd.read_excel()也可以)。
故障: 如果我将xlsx文件写入csv,则 pd.read_csv(... )将导致csv错误,但是如果我手动创建或更改文件,它将正常工作。
import pandas as pd; import csv; import xlrd
# open excel file
wb = xlrd.open_workbook(my_xlsx)
sh = wb.sheet_by_name('Sheet1')
# write each row from excel to csv
with open(my_csv, 'w', newline='') as csvFile:
wr = csv.writer(csvFile, quoting=csv.QUOTE_MINIMAL)
for rownum in range(sh.nrows):
wr.writerow(sh.row_values(rownum))
# read into dataframe
df = pd.read_csv(my_csv) # <-- this step throws the byte error
这会引发错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x85 in position 17: invalid start byte
修复: 如果在写入后通过全部复制/粘贴/保存来更改my_csv文件,或者仅编辑内容并保存,就不会再出现字节错误。 没有手动干预,我还没有找到解决问题的方法。
问题: 这是怎么回事此错误与Windows文本处理有关吗?是否可以通过在写入步骤中强制使用UTF-8编码来解决此问题?
我还没有机会在Linux上对其进行测试,但是如果这确实是Windows纯文本错误,希望它能够正常工作。对于我来说,这不仅仅是挂断电话的学习要点,但将不胜感激!
答案 0 :(得分:0)
也许您需要使用encoding='utf-8'
选项打开csv。
这是代码。
import pandas as pd; import csv; import xlrd
# open excel file
wb = xlrd.open_workbook(my_xlsx)
sh = wb.sheet_by_name('Sheet1')
# write each row from excel to csv
with open(my_csv, 'w', encoding='utf-8', newline='') as csvFile:
wr = csv.writer(csvFile, quoting=csv.QUOTE_MINIMAL)
for rownum in range(sh.nrows):
wr.writerow(sh.row_values(rownum))
# read into dataframe
df = pd.read_csv(my_csv)