pandas将excel读为格式

时间:2016-06-26 12:15:57

标签: python excel pandas

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

这个例如:

ITEM NAME UNIT PRICE
item1     USD 99
item2     SGD 45

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

谢谢你们。

对Daniel来说,这就是我实现'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)

3 个答案:

答案 0 :(得分:2)

没有任何好方法可以做到这一点。 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 "#'

答案 1 :(得分:0)

对于遇到同样问题的任何人,我是通过将每张工作表分成CSV来实现的,使用此answer

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

答案 2 :(得分:0)

老实说,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)