如何读取Excel中非表格形式的多组数据并过滤空单元格
提取Excel中的多组类表格数据
我需要读取一个包含多组类表格数据的Excel文件,这些数据以类表格形式划分存储,但并未保存为Excel正式的Table对象。目前已实现文件读取,但会读取到无关的空单元格,仅需提取其中的类表格数据。以下是我编写的代码:
def separar_tablas(df): tablas = [] dfs = [] tabla_actual = None for _, row in df.iterrows(): for i, value in row.items(): etiqueta = str(row[2]) if pd.notnull(value): if etiqueta.startswith('RuleTable'): if pd.notnull(etiqueta): tablas.append(etiqueta) if tabla_actual is not None: dfs.append(tabla_actual) tabla_actual = pd.DataFrame(columns=df.columns) tabla_actual = pd.concat([tabla_actual, row],axis = 1, ignore_index=True) dfs.append(tabla_actual) return dfs
代码问题分析与修正方案
原代码存在多处逻辑缺陷,无法正确提取目标数据:
- 多余的内层单元格遍历,会重复触发表格创建逻辑
- 错误使用
pd.concat按列拼接行,导致表格结构混乱 - 未处理属于当前表格的非起始行,也未过滤空行
以下是修正后的代码:
import pandas as pd def separar_tablas(df): dfs = [] tabla_actual = None for _, row in df.iterrows(): # 跳过全空行,排除无关空单元格 if row.isnull().all(): continue etiqueta = row[2] # 判断当前行是否为新表格的起始行 if pd.notnull(etiqueta) and str(etiqueta).startswith('RuleTable'): # 若已有未完成的表格,先存入结果列表 if tabla_actual is not None: dfs.append(tabla_actual) # 初始化新表格,用当前行的非空列作为表头(可根据实际需求调整) tabla_actual = pd.DataFrame(columns=row.dropna().index) tabla_actual.loc[len(tabla_actual)] = row elif tabla_actual is not None: # 将当前行加入正在构建的表格 tabla_actual.loc[len(tabla_actual)] = row # 存入最后一个表格 if tabla_actual is not None: dfs.append(tabla_actual) return dfs
关键优化点
- 移除冗余循环,仅通过每行第3列判断表格起始
- 自动过滤全空行,避免无效数据干扰
- 按行正确拼接表格数据,保证结构正常
- 完善收尾逻辑,避免遗漏最后一组表格
内容的提问来源于stack exchange,提问作者CarlosFf
相关产品推荐
相关产品推荐

