Pandas 转置一列

Pandas 转置一列

在本文中,我们将介绍如何使用Pandas(一个强大的Python数据处理工具)将数据框(DataFrame)的一列数据转置成行数据。首先,我们先来了解一下Pandas的基础知识。

阅读更多:Pandas 教程

什么是Pandas?

Pandas是Python中一个广泛使用的开源数据分析库,它提供了高效的数据结构和各种数据操作工具,使数据处理变得更加简单、快捷和灵活。主要有以下两种数据结构:

  1. Series

这是一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。下面是Series的一个例子:

import pandas as pd
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print(s)

输出结果如下:

a    1
b    2
c    3
d    4
e    5
dtype: int64

其中dtype代表数据类型,int64代表64位整型。

  1. DataFrame

这是Pandas中最重要的一种数据结构,它是由多个Series按照列方向组合而成的二维表格数据结构,每个Series代表表格中的一列,每一行都有一个索引标签(如果没有指定,则默认为从0开始的整数)。下面是DataFrame的一个例子:

data = {'name': ['Tom', 'Jerry', 'Mickey', 'Donald'],
        'age': [23, 45, 18, 33],
        'gender': ['male', 'male', 'female', 'male']}
df = pd.DataFrame(data)
print(df)

输出结果如下:

      name  age  gender
0      Tom   23    male
1    Jerry   45    male
2   Mickey   18  female
3   Donald   33    male

如何转置一列?

现在假设我们有如下的DataFrame,其中包含了一个类别(Category)的列及其对应的值(Value):

df = pd.DataFrame({'Category': ['A', 'B', 'C', 'D'],
                   'Value': [10, 20, 30, 40]})
print(df)

输出结果如下:

  Category  Value
0        A     10
1        B     20
2        C     30
3        D     40

我们可以将该DataFrame的’Value’列转置成一行数据,具体方法是先用set_index()方法将’Category’列设置为行索引,再用T属性进行转置:

df.set_index('Category').T

输出结果如下:

Category   A   B   C   D
Value     10  20  30  40

可以看到,’Category’列已经被转置成了一行数据。

实例演示

下面我们通过一个实例来进一步说明如何将DataFrame的一列数据转置成行数据。假设我们从某个网站上获取了一个用于描述各个城市气温的DataFrame,如下所示:

import pandas as pd
data = {'City': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'],
        'Jan': [-2.8, 3.8, 13.5, 15.0],
        'Feb': [0.6, 6.2, 15.2, 17.0],
        'Mar': [7.6, 11.0, 19.1, 22.0],
        'Apr': [15.1, 17.9, 24.4, 26.6],
        'May': [21.0, 23.8, 28.5, 30.6],
        'Jun': [25.1, 28.4, 30.3, 31.9],
        'Jul': [26.9, 32.1, 31.7, 33.0],
        'Aug': [26.1, 32.1, 31.6, 33.5],
        'Sep': [20.6, 28.2, 29.3, 30.8],
        'Oct': [13.2, 22.1, 25.1, 27.0],
        'Nov': [4.0, 15.2, 18.7, 20.0],
        'Dec': [-1.8, 8.6, 12.9, 14.0]}
df = pd.DataFrame(data)
print(df)

输出结果如下:

        City  Jan  Feb  Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov  Dec
0    Beijing -2.8  0.6  7.6  15.1  21.0  25.1  26.9  26.1  20.6  13.2  4.0 -1.8
1   Shanghai  3.8  6.2 11.0  17.9  23.8  28.4  32.1  32.1  28.2  22.1 15.2  8.6
2  Guangzhou 13.5 15.2 19.1  24.4  28.5  30.3  31.7  31.6  29.3  25.1 18.7 12.9
3   Shenzhen 15.0 17.0 22.0  26.6  30.6  31.9  33.0  33.5  30.8  27.0 20.0 14.0

现在,我们想把’City’列的数据转置成一行。具体处理方法如下:

# 方法一:set_index() + T
transposed_df = df.set_index('City').T
print(transposed_df)

# 方法二:melt() + pivot()
molten_df = df.melt(id_vars=['City'], var_name='Month', value_name='Temperature')
transposed_df = molten_df.pivot(index='Month', columns='City', values='Temperature')
print(transposed_df)

方法一通过set_index()方法将’City’列设置为行索引,再使用T属性进行转置。方法二先使用melt()方法将DataFrame“溶解”成两列,再使用pivot()方法将数据透视成所需格式。两种方法的输出结果是一样的:

City  Beijing  Guangzhou  Shanghai  Shenzhen
Jan      -2.8       13.5       3.8      15.0
Feb       0.6       15.2       6.2      17.0
Mar       7.6       19.1      11.0      22.0
Apr      15.1       24.4      17.9      26.6
May      21.0       28.5      23.8      30.6
Jun      25.1       30.3      28.4      31.9
Jul      26.9       31.7      32.1      33.0
Aug      26.1       31.6      32.1      33.5
Sep      20.6       29.3      28.2      30.8
Oct      13.2       25.1      22.1      27.0
Nov       4.0       18.7      15.2      20.0
Dec      -1.8       12.9       8.6      14.0

总结

本文介绍了如何使用Pandas将DataFrame的一列数据转置成行数据。具体方法是使用set_index()方法将该列设置为行索引,再用T属性进行转置;或者用melt()方法将DataFrame“溶解”成两列,再用pivot()方法透视成所需格式。通过这篇文章的学习,希望读者能够掌握这一实用的数据处理技巧,并能够灵活应用到实际的数据分析过程中。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程