Pandas 将列转化为行

Pandas 将列转化为行

在数据处理过程中,有时候需要将数据从列格式转换成行格式。Pandas是一种流行的Python数据分析库,能够轻松地完成这个任务。

阅读更多:Pandas 教程

一、Pandas行列操作概述

Pandas有两种基本的数据结构,即Series和DataFrame。Series是一维数组,DataFrame是二维表格。我们通常使用DataFrame进行数据操作。每一列的数据类型可以不同,可以是整数、浮点数、字符串等。

Pandas的优点之一是它提供的广泛而灵活的行列操作,如下:

  • 索引:提取一列或一行
  • 切片:选择多列或多行
  • 排序:按列或行的值排序
  • 重塑(reshape):由行重组为列或由列重组为行
  • 聚合:将数据分组并对每个组进行计算
  • 连接:将多个数据框连接为一个数据框
  • 透视表:对数据进行透视,生成汇总的表格

这些操作可以帮助我们在数据处理中更好地理解数据。接下来让我们重点了解重塑操作。

二、重塑数据

在读取数据的时候,我们通常会面临将数据从列格式转换至行格式的任务。例如:

原始数据:

姓名 性别 英语 数学 物理
小红 80 85 73
小明 88 89 90
小刚 92 90 98

处理过的数据:

姓名 性别 科目 成绩
小红 英语 80
小红 数学 85
小红 物理 73
小明 英语 88
小明 数学 89
小明 物理 90
小刚 英语 92
小刚 数学 90
小刚 物理 98

通过上面的数据,可以更好地对列转行进行理解。在Pandas中,有两种转换方式:

  • 基于列名(变量名)的转换
  • 基于索引位置(序号)的转换

下面,我们将通过这两种方式详细讲解。

1.基于列名的转换

基于列名的转换是一个列转成多行的过程。在实践中,我们通常需要使用melt方法实现。

列名转行:

import pandas as pd

scores = pd.DataFrame({
        'name':['小红','小明','小刚'],
        'gender':['女','男','男'],
        'english':[80,88,92],
        'math':[85,89,90],
        'physics':[73,90,98]})

long_scores = pd.melt(scores, id_vars=['name','gender'], 
                      var_name='subject', value_name='score')

long_scores
Python

输出结果:

name gender subject score
0 小红 英语 80
1 小明 英语 88
2 小刚 英语 92
3 小红 数学 85| 4 | 小明 | 男 | 数学 | 89
5 小刚 数学 90
6 小红 物理 73
7 小明 物理 90
8 小刚 物理 98

其中,我们使用melt方法指定了待转换的数据、保留的列、转换后的目标列名,最后输出了转换后的结果。id_vars参数定义了需要保留的列,它们将不参与列转行的过程。var_name参数则定义了转换后的列名,value_name定义了转换后的值名。

转换前的数据中,每个学生成绩信息都包含在一个宽表中。我们通过将表转换为多行格式,将学生成绩信息拆分为了多行。

2.基于位置的转换

基于位置的转换是一个列转成一列的过程。通过stack方法实现。

位置转行:

import pandas as pd

scores = pd.DataFrame({
        'name':['小红','小明','小刚'],
        'gender':['女','男','男'],
        'english':[80,88,92],
        'math':[85,89,90],
        'physics':[73,90,98]})

stacked_scores = scores.set_index(['name','gender']).stack().reset_index()
stacked_scores.columns = ['name','gender','subject','score']

stacked_scores
Python

输出结果:

name gender subject score
0 小红 english 80
1 小红 math 85
2 小红 physics 73
3 小明 english 88
4 小明 math 89
5 小明 physics 90
6 小刚 english 92
7 小刚 math 90
8 小刚 physics 98

其中,我们使用set_index方法将姓名和性别作为索引列,并使用stack方法进行列转行,在重新命名列名后输出转换后的结果。

转换前的数据中,每个学生成绩信息都包含在一个宽表中。我们通过将表转换为多行格式,将学生成绩信息拆分为了多行。

三、小结

在本文中,我们介绍了Pandas的行列操作以及重塑数据的两种方法。通过转换前后的数据,我们了解了列转行的概念、进行列转行的两种方式以及相应的方法。这些方法可以帮助我们更好地理解数据,从而对数据进行更多的操作和分析。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册