如何提取Word表格生成DataFrame,避免循环处理时新增多余行列
问题原因
原代码将所有表格的所有数据行无差别合并到同一个列表,生成DataFrame后转置时,每一条数据行会被转为独立的新列,不会按表格分组、按字段对齐填充缺失位置。
修正后代码
from docx.api import Document import pandas as pd def extract_tables_from_docx(path, output_path, name): document = Document(path) # 存储每个表格对应的字段序列 table_series_list = [] for table_idx, table in enumerate(document.tables, start=1): current_table_dict = {} # 跳过表头行,若你的表格没有表头可删除[1:] for row in table.rows[1:]: # 取当前行第一列为字段名,第二列为对应值,可根据你的表格结构调整 field_name = row.cells[0].text.strip() field_value = row.cells[1].text.strip() current_table_dict[field_name] = field_value # 将当前表格转为Series,命名为对应表格标识,作为后续拼接的一列 current_series = pd.Series(current_table_dict, name=f"表格{table_idx}") table_series_list.append(current_series) # 横向拼接所有表格序列,自动按字段名对齐,缺失值填充NaN final_df = pd.concat(table_series_list, axis=1) # 导出为csv,utf-8-sig编码保证中文在Excel中正常显示 final_df.to_csv(f"{output_path}/{name}.csv", encoding="utf-8-sig") return final_df
逻辑说明
- 以单个表格为处理单位,每个表格提取为一个以字段名为索引的
Series对象 - 调用
pd.concat沿列方向拼接所有Series,会自动根据索引(字段名)对齐,对应字段有值就填充,无值则保留NaN,完全匹配你需要的效果 - 若你的表格结构不是两列键值对的格式,只需要调整行内单元格的取值逻辑即可
内容的提问来源于stack exchange,提问作者user14566335
相关产品推荐
相关产品推荐

