如何用Python Pandas合并Excel中跨两行的单元格为数组?
用Pandas处理Excel跨行单元格合并需求
问题场景
Excel表格中部分单元格内容跨两行分布,直接用Pandas读取后会生成两行数据:
1:[Data A1, Data B1, Data C1, Data D1, Data E1], 2:[' ', Data B1, ' ', Data D1, ' ']
需要将跨行的单元格内容合并到同一行的对应单元格中,以数组形式存储,最终目标格式:
1:[Data A1, [Data B1, Data B1], Data C1, [Data D1, Data D1], Data E1]
解决方案代码
import pandas as pd # 读取Excel文件,将空单元格转为空字符串(避免默认NaN干扰判断) df = pd.read_excel('data.xlsx', sheet_name='Sheet1', keep_default_na=False) # 将数据按每两行分为一组(对应跨行的两行数据) row_groups = df.groupby(df.index // 2) # 定义跨行合并逻辑 def merge_group_rows(group): merged_cols = [] for col_name in group.columns: # 获取当前列两行的所有值,过滤空字符串 col_values = [val for val in group[col_name].tolist() if val != ''] # 只有一个有效值则直接保留,多个则转为数组 merged_cols.append(col_values if len(col_values) > 1 else col_values[0]) return pd.Series(merged_cols, index=group.columns) # 应用合并逻辑到每个分组,生成处理后的DataFrame processed_df = row_groups.apply(merge_group_rows) # 保存结果到新Excel文件 processed_df.to_excel('output.xlsx', index=False)
代码说明
- 读取数据处理空值:使用
keep_default_na=False将Excel空白单元格转为空字符串,避免后续判断时混淆NaN和空内容。 - 分组逻辑:通过
df.index // 2把连续两行分为一个分组,确保跨行的内容被归到同一组处理。 - 合并逻辑:遍历每个列,收集分组内两行的有效数据(过滤空字符串),如果有效数据多于一个则转为数组,否则保留单个值。
- 结果保存:将处理后的分组数据转为DataFrame,直接导出到Excel文件。
内容的提问来源于stack exchange,提问作者DBGGHOST
相关产品推荐
相关产品推荐

