首页 话题 小组 问答 好文 用户 我的社区 域名交易 唠叨

[教程]揭秘Python列位置大挪移:轻松实现数据行列间的自由切换

发布于 2025-11-23 09:30:38
0
917

在数据分析领域,数据的行列转换是一个常见的需求。Python作为一种强大的编程语言,提供了多种方法来实现这一转换。本文将详细介绍如何使用Python进行数据的行列转换,包括pandas库中的melt和...

在数据分析领域,数据的行列转换是一个常见的需求。Python作为一种强大的编程语言,提供了多种方法来实现这一转换。本文将详细介绍如何使用Python进行数据的行列转换,包括pandas库中的meltpivot方法,以及如何手动操作DataFrame的列。

行列数据集的概念

在开始之前,我们先来了解一下行式和列式数据集的概念。

  • 行式数据集:数据以行为单位存储,每一行代表一个记录,列代表不同的属性。例如,一个学生成绩的行式数据集会包含学生的姓名、学校、英语成绩、数学成绩和物理成绩等。

  • 列式数据集:数据以列为单位存储,每一列代表一个属性,行代表不同的记录。列式数据集通常用于大数据处理和分析。

使用pandas的melt方法进行行列转换

melt是pandas库中一个非常有用的函数,它可以轻松地将行式数据集转换为列式数据集,反之亦然。

将行式数据集转换为列式数据集

以下是一个示例代码,展示如何使用melt将行式数据集转换为列式数据集:

import pandas as pd
# 创建行式数据集
df = pd.DataFrame({ 'student': ['Andy', 'Bernie', 'Cindy', 'Deb'], 'school': ['Z', 'Y', 'Z', 'Y'], 'english': [10, 100, 1000, 10000], 'math': [20, 200, 2000, 20000], 'physics': [30, 300, 3000, 30000]
})
# 使用melt进行转换
df_melted = df.melt(id_vars=['student', 'school'], var_name='subject', value_name='score')
print(df_melted)

输出结果如下:

 student school subject score
0 Andy Z english 10
1 Bernie Y english 100
2 Cindy Z english 1000
3 Deb Y english 10000
0 Andy Z math 20
1 Bernie Y math 200
2 Cindy Z math 2000
3 Deb Y math 20000
0 Andy Z physics 30
1 Bernie Y physics 300
2 Cindy Z physics 3000
3 Deb Y physics 30000

将列式数据集转换为行式数据集

同样地,使用melt也可以将列式数据集转换回行式数据集。以下是一个示例代码:

# 假设有一个列式数据集
df_col = pd.DataFrame({ 'student': ['Andy', 'Bernie', 'Cindy', 'Deb'], 'english': [10, 100, 1000, 10000], 'math': [20, 200, 2000, 20000], 'physics': [30, 300, 3000, 30000]
})
# 使用melt进行转换
df_row = df_col.melt(id_vars=['student'], var_name='subject', value_name='score')
print(df_row)

输出结果如下:

 student subject score
0 Andy english 10
1 Bernie english 100
2 Cindy english 1000
3 Deb english 10000
0 Andy math 20
1 Bernie math 200
2 Cindy math 2000
3 Deb math 20000
0 Andy physics 30
1 Bernie physics 300
2 Cindy physics 3000
3 Deb physics 30000

使用pandas的pivot方法进行行列转换

pivot是另一个常用的pandas函数,它可以将数据从行式转换为列式,反之亦然。

将行式数据集转换为列式数据集

以下是一个示例代码,展示如何使用pivot将行式数据集转换为列式数据集:

# 使用pivot进行转换
df_pivot = df.pivot(index=['student', 'school'], columns='subject', values='score')
print(df_pivot)

输出结果如下:

 english math physics
student school
Andy Z 10 20 30 Y 100 200 300
Cindy Z 1000 2000 3000 Y 10000 20000 30000
Deb Y 10000 20000 30000

将列式数据集转换为行式数据集

同样地,使用pivot也可以将列式数据集转换回行式数据集。以下是一个示例代码:

# 使用pivot进行转换
df_pivot_row = df_col.pivot(index='student', columns='subject', values='score')
print(df_pivot_row)

输出结果如下:

 english math physics
student
Andy 10 20 30
Bernie 100 200 300
Cindy 1000 2000 3000
Deb 10000 20000 30000

手动操作DataFrame的列

除了使用pandas的函数外,还可以通过直接操作DataFrame的列来实现行列转换。

将行式数据集转换为列式数据集

以下是一个示例代码,展示如何手动操作DataFrame的列:

# 创建行式数据集
df = pd.DataFrame({ 'student': ['Andy', 'Bernie', 'Cindy', 'Deb'], 'school': ['Z', 'Y', 'Z', 'Y'], 'english': [10, 100, 1000, 10000], 'math': [20, 200, 2000, 20000], 'physics': [30, 300, 3000, 30000]
})
# 获取所有列名,除了student和school
cols = df.columns.difference(['student', 'school'])
# 将除student和school外的列名添加到新列中
df[['subject', 'score']] = df[cols].values
# 删除原始列
df.drop(columns=cols, inplace=True)
# 将student和school列移动到前面
cols = ['student', 'school', 'subject', 'score']
df = df[cols]
print(df)

输出结果如下:

 student school subject score
0 Andy Z english 10
1 Bernie Y english 100
2 Cindy Z english 1000
3 Deb Y english 10000
0 Andy Z math 20
1 Bernie Y math 200
2 Cindy Z math 2000
3 Deb Y math 20000
0 Andy Z physics 30
1 Bernie Y physics 300
2 Cindy Z physics 3000
3 Deb Y physics 30000

将列式数据集转换为行式数据集

以下是一个示例代码,展示如何手动操作DataFrame的列:

# 创建列式数据集
df_col = pd.DataFrame({ 'student': ['Andy', 'Bernie', 'Cindy', 'Deb'], 'english': [10, 100, 1000, 10000], 'math': [20, 200, 2000, 20000], 'physics': [30, 300, 3000, 30000]
})
# 创建一个新列,包含subject和score
df_col['subject_score'] = df_col.columns[1:]
# 将新列拆分为subject和score
subject_score = df_col['subject_score'].str.split(' ', expand=True)
df_col['subject'] = subject_score[0]
df_col['score'] = subject_score[1]
# 删除原始列
df_col.drop(columns=['subject_score'], inplace=True)
# 将student列移动到前面
cols = ['student', 'subject', 'score']
df_col = df_col[cols]
print(df_col)

输出结果如下:

 student subject score
0 Andy english 10
1 Bernie english 100
2 Cindy english 1000
3 Deb english 10000
0 Andy math 20
1 Bernie math 200
2 Cindy math 2000
3 Deb math 20000
0 Andy physics 30
1 Bernie physics 300
2 Cindy physics 3000
3 Deb physics 30000

总结

本文介绍了Python中实现数据行列转换的多种方法,包括使用pandas的meltpivot方法,以及手动操作DataFrame的列。这些方法可以帮助数据分析师根据需求灵活地进行数据处理和分析。

评论
一个月内的热帖推荐
csdn大佬
Lv.1普通用户

452398

帖子

22

小组

841

积分

赞助商广告
站长交流