获取熊猫中Excel单元格背景色read_excel?

csa*_*nes 5 python excel pandas

我有一个Excel文件,其中的单元格具有背景色。我读文件到大熊猫read_excel。有什么方法可以获取细胞的背景色吗?

csa*_*nes 6

xlrd按照Mark的建议,强行通过:

from xlrd import open_workbook
wb = open_workbook('wb.xls', formatting_info=True)
sheet = wb.sheet_by_name("mysheet")
#create empy colormask matrix
bgcol=np.zeros([sheet.nrows,sheet.ncols])
#cycle through all cells to get colors
for row in range(sheet.nrows):
  for column in range(sheet.ncols):
    cell = sheet.cell(row, column)  
    fmt = wb.xf_list[cell.xf_index]
    bgcol[row,column]=fmt.background.background_colour_index
#return pandas mask of colors
colormask=pd.DataFrame(bgcol) 
Run Code Online (Sandbox Code Playgroud)

然而,必须有更好的方法直接通过熊猫......

  • 不幸的是,formatting_info=True 仅适用于 .xls 而不适用于 .xlsx 文件 :-( 一个很好的提示 - 谢谢! (3认同)

Sum*_*rel 5

上面建议的解决方案仅适用于xls文件,不适用于xlsx文件。这引发了一个NotImplementedError: formatting_info=True not yet implemented. Xlrd库仍未更新以适用于xlsx文件。因此,您Save As每次都必须更改格式,这可能对您不起作用。
这是xlsx使用openpyxl库的文件的解决方案。A2是我们需要找出其颜色代码的单元格。

import openpyxl
from openpyxl import load_workbook
excel_file = 'color_codes.xlsx' 
wb = load_workbook(excel_file, data_only = True)
sh = wb['Sheet1']
color_in_hex = sh['A2'].fill.start_color.index # this gives you Hexadecimal value of the color
print ('HEX =',color_in_hex) 
print('RGB =', tuple(int(color_in_hex[i:i+2], 16) for i in (0, 2, 4))) # Color in RGB
Run Code Online (Sandbox Code Playgroud)

  • 就我而言,这种方法给出的结果不准确(即未正确捕获颜色)。 (2认同)

Gio*_*Gio 5

改进Sumit 的答案(我认为这应该是公认的答案),您可以使用列表理解来获取整个列的颜色:

import openpyxl
from openpyxl import load_workbook
excel_file = 'my_file.xlsx' 
wb = load_workbook(excel_file, data_only = True)
sh = wb['my_sheet']
# extract color from column A.
color_in_hex = [cell.fill.start_color.index for cell in sh['A:A']]
Run Code Online (Sandbox Code Playgroud)