如何借助Python pandas库实现指定格式的数据转换
利用Pandas实现长表转宽表操作
你这个需求是典型的长格式数据表转宽格式数据表的透视需求,直接用pandas内置的透视方法即可实现,操作步骤如下:
- 导入依赖并加载原始数据
import pandas as pd # 按照你的数据存储格式选择对应的读取方法,csv用pd.read_csv,excel用pd.read_excel df = pd.read_excel("你的原始数据存储路径")
- 执行透视转换
- 如果你确定原始数据中,同一个行维度+列维度的组合没有重复记录,直接用
pivot方法性能更好:
- 如果你确定原始数据中,同一个行维度+列维度的组合没有重复记录,直接用
# 参数说明: # index:传入作为行唯一标识的列名,也就是最终结果里每行代表的实体维度,比如用户ID、姓名 # columns:传入要将其取值拆分为独立新列的分类列,比如科目、考试类型 # values:传入要填充到新生成列中的数值列,比如分数、销售额 df_transformed = df.pivot( index="姓名", columns="考试类型", values="成绩" ).reset_index() # 按需重命名生成的新列 df_transformed.columns = ["姓名", "期中成绩", "期末成绩"]
- 如果原始数据存在同维度组合的重复记录,使用
pivot_table方法,可自定义聚合规则处理重复值:
df_transformed = df.pivot_table( index="姓名", columns="考试类型", values="成绩", aggfunc="max" # 聚合规则可按需替换为mean(平均)、sum(求和)、min(最小值)等 ).reset_index()
- 导出转换完成的结果
# 导出时设置index=False,避免把pandas默认行索引写入文件 df_transformed.to_excel("转换完成的结果文件.xlsx", index=False)
小提示:如果需要多个列共同作为行的唯一标识,给
index参数传入列名组成的列表即可,例如index=["班级", "学号", "姓名"]
内容的提问来源于stack exchange,提问作者Qendrim Krasniqi
相关产品推荐
相关产品推荐

