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

如何使用Pandas高效重构数据集以支持探索性数据分析(EDA)?

Pandas宽表转长表(部门-变量年份列转年份-部门-变量值)

场景说明

你的原始数据以部门为行,列名格式为[变量名]_[年份](比如营收_2013、利润_2014),需要转成年份、部门、变量、变量值的长表结构,用Pandas可以通过两种简洁的方法实现,无需手动操作。

方法1:使用pivot_longer(推荐,Pandas 1.1.0+支持)

pivot_longer是专门为宽表转长表设计的API,语法更直观,适合初学者。

示例代码

import pandas as pd

# 读取你的CSV数据
df = pd.read_csv('your_dataset.csv')

# 执行重构
long_table = df.pivot_longer(
    id_cols='部门',  # 固定作为行标识的列
    names_to=['变量', '年份'],  # 拆分后生成的两个新列名
    names_pattern=r'(.*)_(.*)',  # 正则匹配列名,拆分变量和年份(适配"变量_年份"格式)
    values_to='变量值'  # 存储原列数值的新列名
)

# 可选:将年份转为整数类型
long_table['年份'] = long_table['年份'].astype(int)

参数解释

  • id_cols:指定不需要被转换的列(这里是"部门",每个部门的标识保留)
  • names_to:定义拆分列名后生成的新列名称,对应正则匹配的分组顺序
  • names_pattern:正则表达式,用来匹配原始列名的结构,把变量_年份拆分为两个分组
  • values_to:给原列的数值指定新列名

方法2:使用melt + 字符串拆分(兼容旧版Pandas)

如果你的Pandas版本较低,用melt先把宽表转成中间表,再拆分列名。

示例代码

import pandas as pd

df = pd.read_csv('your_dataset.csv')

# 第一步:将所有变量年份列转为"变量_年份"和"变量值"两列
melted = df.melt(id_vars='部门', var_name='变量_年份', value_name='变量值')

# 第二步:拆分"变量_年份"列为"变量"和"年份"
melted[['变量', '年份']] = melted['变量_年份'].str.split('_', expand=True)

# 第三步:清理临时列并调整列顺序
long_table = melted.drop('变量_年份', axis=1)[['部门', '年份', '变量', '变量值']]

# 可选:转换年份类型
long_table['年份'] = long_table['年份'].astype(int)

注意事项

  • 如果列名的分隔符不是下划线(比如空格、连字符),需要对应修改正则或拆分参数。例如列名是营收2013,正则改为r'(.*)(\d{4})',拆分用str.extract(r'(.*)(\d{4})', expand=True)
  • 如果存在不规则列名,建议先清理列名(比如替换特殊字符)再执行转换,避免拆分失败
  • 转换后可以用long_table.head()查看前几行数据,验证结构是否符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:12:50