如何利用Python 2.7实现按相同Title值合并Excel工作表行?
Hi Jennifer,当然可以用Python 2.7实现基于相同Title值合并Excel行的需求!下面我会给出两种实用的解决方案,你可以根据自己的数据源格式和需求来选择:
在Python 2.7中基于相同Title合并Excel行的解决方案
方法一:使用pandas库(简洁高效)
pandas是处理表格数据的利器,虽然Python 2.7已停止官方维护,但我们可以安装兼容的旧版本来完成任务。
步骤1:安装兼容的依赖库
在命令行执行以下命令,安装适配Python 2.7的版本:
pip install pandas==0.24.2 xlrd==1.2.0 openpyxl==2.6.4
pandas==0.24.2:最后一个支持Python 2.7的pandas稳定版本xlrd==1.2.0:支持读取传统.xls格式文件openpyxl==2.6.4:支持读取现代.xlsx格式文件
步骤2:代码实现
假设你的源Excel文件是source.xlsx,包含Title、Description、Quantity三列,需求是:相同Title的行合并,Description用逗号拼接不同内容,Quantity求和。代码如下:
import pandas as pd # 读取源文件(如果是.xls格式,将engine参数改为'xlrd') df = pd.read_excel('source.xlsx', engine='openpyxl') # 定义聚合规则:按Title分组,自定义各列的合并逻辑 aggregation_rules = { 'Description': lambda x: ', '.join(x.astype(str)), 'Quantity': 'sum' } # 执行分组合并 merged_df = df.groupby('Title').agg(aggregation_rules).reset_index() # 保存结果到新文件(.xls格式用engine='xlrd') merged_df.to_excel('merged_result.xlsx', index=False, engine='openpyxl') print("合并完成,结果已保存到merged_result.xlsx")
如果你的合并需求不同(比如保留某列的第一个值),只需修改aggregation_rules即可,比如用'first'代替求和逻辑。
方法二:使用xlrd+xlwt库(原生Excel操作)
如果你不想依赖pandas,也可以用原生的Excel处理库xlrd(读取)和xlwt(写入)实现,适合需要精细控制Excel格式的场景。
步骤1:安装依赖库
pip install xlrd==1.2.0 xlwt==1.3.0
步骤2:代码实现
以下代码适用于.xls格式文件,实现相同Title的行合并,其他列值用逗号拼接:
import xlrd import xlwt # 读取源Excel文件 workbook = xlrd.open_workbook('source.xls') sheet = workbook.sheet_by_index(0) # 获取表头并定位Title列的位置 headers = sheet.row_values(0) title_col_idx = headers.index('Title') # 用字典存储每个Title对应的合并后数据 merged_data = {} for row_idx in range(1, sheet.nrows): row_values = sheet.row_values(row_idx) current_title = row_values[title_col_idx] if current_title not in merged_data: # 首次遇到该Title,初始化数据 merged_data[current_title] = row_values.copy() else: # 合并非Title列的内容(逗号分隔,可按需修改) for col_idx in range(len(row_values)): if col_idx != title_col_idx: merged_data[current_title][col_idx] = f"{merged_data[current_title][col_idx]}, {row_values[col_idx]}" # 创建新Excel文件并写入数据 new_workbook = xlwt.Workbook() new_sheet = new_workbook.add_sheet('Merged Result') # 写入表头 for col_idx, header in enumerate(headers): new_sheet.write(0, col_idx, header) # 写入合并后的数据 row_num = 1 for title, values in merged_data.items(): for col_idx, value in enumerate(values): new_sheet.write(row_num, col_idx, value) row_num += 1 # 保存结果 new_workbook.save('merged_result.xls') print("合并完成,结果已保存到merged_result.xls")
额外提示
- 请根据源文件格式(
.xls或.xlsx)选择对应的代码和依赖; - 如果文件包含多个工作表,可通过
sheet_by_name('Sheet名称')指定要处理的工作表; - Python 2.7已停止官方维护,若后续有长期开发需求,建议逐步升级到Python 3.x版本。
内容的提问来源于stack exchange,提问作者Jennifer Zou
相关产品推荐
相关产品推荐

