如何使用Pandas实现特定格式的单元格合并与表格重构
使用Pandas实现表格单元格合并与结构转换的方案
没问题,我来帮你搞定这个表格转换需求!根据你给出的前后表格对比,核心是把原表格中奇数行的内容作为新列名,偶数行的内容作为对应列的值,最终合并成一行多列的结构。下面是具体的Python Pandas实现代码,每一步都有清晰的注释:
import pandas as pd # 1. 构造你提供的原始表格数据 raw_data = [ ['value', 'value', 'value'], # 行0:对应test1-test3的值 ['test4', 'test5', None], # 行1:新增列名test4、test5 ['value', 'value', None], # 行2:对应test4、test5的值 ['test6', 'test7', 'test8'], # 行3:新增列名test6-test8 ['value', 'value', 'value'], # 行4:对应test6-test8的值 ['test9', 'test0', None], # 行5:新增列名test9、test0 ['value', 'value', None] # 行6:对应test9、test0的值 ] original_df = pd.DataFrame(raw_data, columns=['test1', 'test2', 'test3']) # 2. 提取新增的列名和对应的值 # 提取奇数行(索引1、3、5)的非空值作为新列名 new_column_names = original_df.iloc[[1, 3, 5]].stack().tolist() # 提取偶数行(索引0、2、4、6)的非空值作为对应列的值 new_values = original_df.iloc[[0, 2, 4, 6]].stack().tolist() # 3. 合并原列名与新列名,构造最终的DataFrame all_columns = original_df.columns.tolist() + new_column_names final_df = pd.DataFrame([new_values], columns=all_columns) # 4. 可选:设置表格对齐样式(和你给出的示例格式完全匹配) styled_table = final_df.style.set_table_styles([ # 设置表头对齐:第一列右对齐,最后一列右对齐,其余左对齐 {'selector': 'th:first-child', 'props': [('text-align', 'right')]}, {'selector': 'th:last-child', 'props': [('text-align', 'right')]}, {'selector': 'th:not(:first-child):not(:last-child)', 'props': [('text-align', 'left')]}, # 设置单元格对齐:和表头规则一致 {'selector': 'td:first-child', 'props': [('text-align', 'right')]}, {'selector': 'td:last-child', 'props': [('text-align', 'right')]}, {'selector': 'td:not(:first-child):not(:last-child)', 'props': [('text-align', 'left')]} ]) # 查看结果:如果是在Jupyter环境,直接显示styled_table;否则打印HTML或原始数据 print("最终表格数据结构:") print(final_df) # 若要输出带格式的HTML,可使用print(styled_table.to_html())
代码说明:
- 构造原始数据:完全对应你给出的合并前表格,用
None填充空单元格。 - 提取列名和值:使用
iloc精准定位行,stack()自动过滤空值,把分散的列名和值整理成有序列表。 - 合并构造新表:把原列名和新增列名合并,值列表转成二维数组(符合DataFrame的行数据格式),快速生成目标表格。
- 样式设置:通过
Styler模块实现和示例一致的对齐格式,让输出表格更美观规范。
内容的提问来源于stack exchange,提问作者user1082164
相关产品推荐
相关产品推荐

