pandas 以格式化方式读取 excel

Posted

技术标签:

【中文标题】pandas 以格式化方式读取 excel【英文标题】:pandas read excel as formatted 【发布时间】:2016-10-28 13:13:11 【问题描述】:

我如何获取格式化后的电子表格的值?我正在处理货币格式的电子表格

例如:

ITEM NAME UNIT PRICE
item1     USD 99
item2     SGD 45

但术语“USD”和“SGD”是使用 excel 的格式化功能添加的,pandas 的 read_excel 函数看不到这些术语。我会得到值,但不是货币名称。我只能按原样处理电子表格,并且鉴于我有各种电子表格,每个电子表格大约 6-7 张,我希望有一个熊猫(或 python)级别的解决方案,而不是一个 excel 级别的解决方案。

谢谢大家。

丹尼尔,这就是我实现“xlrd”引擎的方式,它似乎没有做任何事情。

excel = pd.ExcelFile('itemlist.xlsx', sheetname=None)
master = pd.DataFrame(None)

for sheet in excel.sheet_names:
    df = pd.read_excel(excel,sheet,header=2, engine='xlrd')
    master=master.append(df)

【问题讨论】:

pandas 内部使用xlrd,它也可以解析格式信息。 @Daniel 编辑了我的帖子以展示我是如何实现 xlrd 引擎的,尽管我似乎遗漏了一些东西 【参考方案1】:

没有什么好方法可以做到这一点。 pandas 不知道数字格式,xlrd 似乎无法从 .xlsx 文件中读取格式 - 请参阅 here

您可以使用openpyxl 来完成此操作,它至少可以访问数字格式,但看起来您基本上必须自己实现所有解析逻辑。

In [26]: from openpyxl import load_workbook

In [27]: wb = load_workbook('temp.xlsx')

In [28]: ws = wb.worksheets[0]

In [29]: ws.cell("B2")  # numeric value = 4, formatted as "USD 4"
Out[29]: <Cell Sheet1.B2>

In [30]: ws.cell("B2").value
Out[30]: 4

In [31]: ws.cell("B2").number_format
Out[31]: '"USD "#'

【讨论】:

【参考方案2】:

对于任何有同样问题的人,我通过使用 answer 将每张工作表分成 CSV 来做到这一点

它保留了电子表格中显示的货币详细信息,虽然有点麻烦,但它还是完成了这项工作。

【讨论】:

【参考方案3】:

老实说,xlrd 允许您访问单元格格式信息。

book = xlrd.open_workbook("tmp/test.xls", formatting_info=True)  
xf_index = book.sheet_by_index(0).cell_xf_index(5,7)  
xf = book.xf_list[xf_index]  
fmt = book.format_map[xf.format_key]  
print(fmt.format_str, fmt.type)  

【讨论】:

这仅适用于“.xls”文件格式,不适用于“.xlsx”文件格式 @Malgo 你是对的。没有适用于这两种格式的库。您需要为每种格式分别实现它。我只是展示了如何为 '.xls' 格式实现它。

以上是关于pandas 以格式化方式读取 excel的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 无法读取 S3 excel 文件。错误:无法确定 Excel 文件格式

Pandas 读取超过 65536 行的 Excel 文件

Pandas 可以在不修改文件其余部分的情况下读取和修改单个 Excel 文件工作表(选项卡)吗?

Pandas只提供了读取啥文件的函数?

Python Pandas 数据以日期格式输出到 excel 的问题 [重复]

pandas格式化输出文本-excel篇