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

Python pandas数据帧清洗:转置首行、合并重复列

Pandas 数据清洗解决方案

步骤1:重构列名关联年份与指标

先提取原始数据的年份和指标元信息,构建多级列名,明确每列对应的年份和统计指标:

import pandas as pd

# 原始数据
df_bad = pd.DataFrame({'col1': ['years', 'country', 'Afghanistan', 'Albania', 'Algeria', 'Andorra'],
                       'col2': [1972, 'political_rights', 4, 7, 6, 4], 
                       'col3': [1972, 'civil_liberties', 5, 7, 6, 3],
                       'col4': [1972, 'status', 'PF', 'NF', 'NF', 'NF'],
                       'col5': [1973, 'political_rights', 7, 7, 6, 4],
                       'col6': [1973, 'civil_liberties', 6, 7, 6, 4],
                       'col7': [1973, 'status', 'NF', 'NF', 'NF', 'PF']})

# 提取年份和指标列表(跳过第一列的标识项)
years = df_bad.iloc[0, 1:].tolist()
indicators = df_bad.iloc[1, 1:].tolist()

# 为数据列设置(年份, 指标)的多级列名
df_bad.columns = ['country'] + list(zip(years, indicators))

步骤2:清理数据并转置为长表

移除前两行元数据,保留国家数据后,将宽表转成长表,拆分年份和指标字段:

# 保留从第三行开始的国家数据
df_clean = df_bad.iloc[2:].reset_index(drop=True)

# 转置为长表,同时保留国家、年份、指标、对应值的关联
df_melted = df_clean.melt(id_vars='country', var_name=('years', 'indicator'), value_name='value')

# 将多级字段拆分为单独列
df_melted[['years', 'indicator']] = pd.DataFrame(df_melted['years'].tolist(), index=df_melted.index)

步骤3:重塑为目标格式

通过透视将指标转为独立列,得到符合要求的整洁数据:

# 透视表重构数据结构
df_final = df_melted.pivot(index=['country', 'years'], columns='indicator', values='value').reset_index()

# 调整列顺序与目标一致
df_final = df_final[['country', 'years', 'political_rights', 'civil_liberties', 'status']]

# 修正数据类型(确保年份和指标为整数类型)
df_final['years'] = df_final['years'].astype(int)
df_final['political_rights'] = df_final['political_rights'].astype(int)
df_final['civil_liberties'] = df_final['civil_liberties'].astype(int)

验证结果

运行后df_final输出与目标数据匹配:

country  years  political_rights  civil_liberties status
0  Afghanistan   1972                 4                5     PF
1  Afghanistan   1973                 7                6     NF
2      Albania   1972                 7                7     NF
3      Albania   1973                 7                7     NF
4      Algeria   1972                 6                6     NF
5      Algeria   1973                 6                6     NF
6      Andorra   1972                 4                3     NF
7      Andorra   1973                 4                4     PF

内容的提问来源于stack exchange,提问作者Kiah Jane Jones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:12:59