Pandas能否检测Excel中的粗体、斜体、下划线等格式?
Pandas检测Excel字体格式(粗体/斜体/下划线)的实现方式
Pandas本身不支持直接读取Excel单元格的字体格式属性(比如粗体、斜体、下划线),因为它的核心是处理表格数据,而非格式信息。要实现这个需求,需要配合专门的Excel文件处理库(如openpyxl或xlrd)来提取格式信息,再与Pandas的DataFrame关联。
方法1:使用openpyxl(推荐,支持.xlsx格式)
openpyxl是处理现代Excel格式(.xlsx)的常用库,可以直接访问单元格的字体格式属性。以下是具体实现步骤:
- 安装依赖:
pip install openpyxl pandas
- 提取格式信息并关联到DataFrame:
import openpyxl import pandas as pd # 用openpyxl加载Excel文件,读取格式信息 wb = openpyxl.load_workbook("your_file.xlsx", data_only=True) ws = wb.active # 存储格式信息的字典,键为单元格坐标,值为格式状态 format_info = {} for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=1, max_col=ws.max_column): for cell in row: font = cell.font format_info[cell.coordinate] = { "is_bold": font.bold, "is_italic": font.italic, "has_underline": font.underline != "none" } # 用Pandas读取原始数据 df = pd.read_excel("your_file.xlsx") # 将格式信息映射到DataFrame的新增列 format_df = pd.DataFrame.from_dict(format_info, orient="index").reset_index() format_df["row"] = format_df["index"].apply(lambda x: openpyxl.utils.cell.coordinate_to_tuple(x)[0]) format_df["col"] = format_df["index"].apply(lambda x: openpyxl.utils.cell.coordinate_to_tuple(x)[1]) # 合并到原始DataFrame(假设原始数据从第2行开始,对应row=2) df = df.merge( format_df.drop(columns=["index"]), left_index=True, right_on=lambda x: x["row"] - 2, how="left" ).drop(columns=["row", "col"])
这段代码会给你的原始DataFrame新增is_bold、is_italic、has_underline三列,标记每个单元格是否对应格式。
方法2:使用xlrd(仅支持.xls格式)
如果你的文件是旧版Excel(.xls),可以用xlrd,但注意xlrd 2.0及以上版本不再支持.xlsx格式:
pip install xlrd==1.2.0 pandas
提取格式的核心代码示例:
import xlrd import pandas as pd wb = xlrd.open_workbook("your_file.xls", formatting_info=True) ws = wb.sheet_by_index(0) format_info = {} for row_idx in range(1, ws.nrows): for col_idx in range(ws.ncols): cell = ws.cell(row_idx, col_idx) xf_idx = cell.xf_index font = wb.font_list[wb.xf_list[xf_idx].font_index] format_info[(row_idx+1, col_idx+1)] = { # 转换为Excel的1-based坐标 "is_bold": font.bold, "is_italic": font.italic, "has_underline": font.underline_type != 0 } # 后续关联DataFrame的逻辑和openpyxl版本类似,这里省略
注意事项
- 如果需要后续将带有格式标记的数据写入新的工作簿,同样需要用
openpyxl作为Pandas的写入引擎,才能保留或设置格式。 - 格式检测是基于单个单元格的,所以需要确保原始DataFrame的行、列与Excel文件的单元格坐标正确对齐。
内容的提问来源于stack exchange,提问作者user2981194
相关产品推荐
相关产品推荐

