由于数字格式为文本,将 Excel 文件读取到 Python 失败

Posted

技术标签:

【中文标题】由于数字格式为文本,将 Excel 文件读取到 Python 失败【英文标题】:Reading Excel file to Python fails due to number formatted as text 【发布时间】:2018-06-17 19:44:34 【问题描述】:

我有大量的 Excel 文件,每个文件都有一列,其中数字被格式化为文本。 Excel 给出错误“此单元格中的数字被格式化为文本或前面带有撇号” - 请参阅第三列,其中单元格有一个绿色三角形。

我的目标是在 Pandas 中打开所有这些文件而无需手动打开每个文件并将列转换为数字。但是,pd.read_excel() 失败并出现以下xlrd 错误:

XLRDError: ZIP file contents not a known type of workbook

不出所料,当我直接使用 xlrd 时:wb = xlrd.open_workbook(filename) 我得到了同样的错误。

我也试过 openpyxl:wb = openpyxl.load_workbook(filename),它给了我这个:

KeyError: "There is no item named 'xl/_rels/workbook.xml.rels' in the archive"

如果我在 excel 中手动将列转换为数字并重新保存工作簿,我确认该文件可由 pandas (xlrd) 和 openpyxl 打开。

有人有什么想法吗?

【问题讨论】:

您有机会上传样本吗?我正在尝试产生同样的错误,但没有完全理解。 在将 excel 读入数据框时,您基本上必须使用“转换器”。阅读文档 (pandas.pydata.org/pandas-docs/stable/generated/…) 的问题似乎与之前的帖子非常相似。 (***.com/questions/32591466/…)。 值得注意的是该文件无效,因为它缺少工作簿关系文件。 【参考方案1】:

在阅读 excel 时使用“转换器”。Docs。 例如:

df = pd.read_excel('yourfile.xlsx',sheetname='sheetname',header=0,converters= "% Chg" : str )

【讨论】:

以上是关于由于数字格式为文本,将 Excel 文件读取到 Python 失败的主要内容,如果未能解决你的问题,请参考以下文章

XLSX.js读取excel日期格式时 将数字转换为正常日期格式

java读取excel文件,怎么取日期列?

在Excel中如何将数字格式批量转换为文本格式,并且保留二位小数?

请问在Pandas用read_excel函数读取数据

将剑道网格导出到excel时格式化为文本的数字

怎样把excel中所有以文本形式存储的数字转换为数字啊???