Pandas 转置一列
在本文中,我们将介绍如何使用Pandas(一个强大的Python数据处理工具)将数据框(DataFrame)的一列数据转置成行数据。首先,我们先来了解一下Pandas的基础知识。
阅读更多:Pandas 教程
什么是Pandas?
Pandas是Python中一个广泛使用的开源数据分析库,它提供了高效的数据结构和各种数据操作工具,使数据处理变得更加简单、快捷和灵活。主要有以下两种数据结构:
- 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位整型。
- 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()方法透视成所需格式。通过这篇文章的学习,希望读者能够掌握这一实用的数据处理技巧,并能够灵活应用到实际的数据分析过程中。
极客教程