You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现Excel百万量级数据的列转行操作

处理百万级Excel数据:列转行(学生科目合并)

输入数据示例

StuId  Name     Subject
1      Adam      French
1      Adam      English 
1      Adam      Science
2      Jon        Maths
2      Jon        French

期望输出格式

StuId     Name       Subject_1  Subject_2  Subject_3
1         Adam       French     English    Science
2         Jon        Maths      French

解决方案(基于Pandas,高效处理百万级数据)

Pandas的向量化操作天生适合处理大规模表格数据,比原生循环或轻量库效率高得多,还能有效控制内存占用。

  1. 安装依赖
    先安装必要的工具库:

    pip install pandas openpyxl
    
  2. 核心代码实现

    import pandas as pd
    
    # 读取Excel:仅加载需要的列,避免冗余数据占用内存(百万级数据必做)
    df = pd.read_excel('input.xlsx', usecols=['StuId', 'Name', 'Subject'])
    
    # 按学生ID和姓名分组,把同一学生的科目聚合为列表
    grouped_df = df.groupby(['StuId', 'Name'])['Subject'].agg(list).reset_index()
    
    # 将科目列表展开为多列,自动适配最多科目数的学生
    max_subject_count = grouped_df['Subject'].str.len().max()
    subject_columns = [f'Subject_{i+1}' for i in range(max_subject_count)]
    grouped_df[subject_columns] = pd.DataFrame(grouped_df['Subject'].tolist(), index=grouped_df.index)
    
    # 整理最终结果:移除临时列表列,调整列顺序
    final_df = grouped_df.drop('Subject', axis=1)[['StuId', 'Name'] + subject_columns]
    
    # 保存结果到Excel,用openpyxl引擎支持大文件写入
    final_df.to_excel('output.xlsx', index=False, engine='openpyxl')
    

超大规模数据优化(内存不足时用)

如果数据量远超内存容量,可以分块读取+分步聚合:

# 分块读取Excel,每块10000行
chunk_iter = pd.read_excel('input.xlsx', usecols=['StuId', 'Name', 'Subject'], chunksize=10000)

# 初始化空DataFrame存储中间聚合结果
aggregated = pd.DataFrame()

for chunk in chunk_iter:
    # 对每个分块做分组聚合
    chunk_group = chunk.groupby(['StuId', 'Name'])['Subject'].agg(list).reset_index()
    # 合并到总结果,重复学生ID需合并科目列表
    aggregated = pd.concat([aggregated, chunk_group]).groupby(['StuId', 'Name'])['Subject'].agg(lambda x: sum(x, [])).reset_index()

# 后续展开列、保存的步骤和之前一致

可选:合并科目为单个单元格

如果不需要拆分多列,而是用分隔符把科目合并成一个单元格(更省内存),可以修改聚合逻辑:

grouped_df = df.groupby(['StuId', 'Name'])['Subject'].agg(', '.join).reset_index()
grouped_df.rename(columns={'Subject': 'Subjects'}, inplace=True)
grouped_df.to_excel('output_single_col.xlsx', index=False, engine='openpyxl')

输出会变成:

StuId  Name    Subjects
1      Adam    French, English, Science
2      Jon     Maths, French

内容的提问来源于stack exchange,提问作者Anuj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:45:34