跳到主要内容

Pandas 数据结构 DataFrame

1. 前言

上一节我们讲述了 Pandas 两种数据结构之一 Series,并介绍了该数据结构的特点、常用属性及方法。Series 数据结构能有效的描述我们实际应用中的一维数据,然而,我们实际生活中接触较多的是有行和列的二维数据,那 Pandas 库中的二维数据结构又是怎样表示的呢?

Pandas 库中的 DataFrame 是一个二维数据结构,可以想象成我们常用的 Excel,它是Pandas 应用中最常用的数据结构。

2. DataFrame 数据结构概述

DataFrame 是一种表格型的数据结构,含有一组有序的列,每列可以存放任意类型的数据,可以看做是由Series组成的字典(公用同一个索引),它有行索引和列索引,行索引在左侧,列索引在上方,并可以通过操作指定行索引和列索引的值。

图片描述

3. DataFrame 数据结构常用的属性

3.1 DataFrame 常用的属性

常用属性属性描述
values返回 ndarray 类型的对象
index获取 DataFrame 行索引对象(可以通过 index.values 获取行索引值)
columns获取 DataFrame 列索引对象(可以通过 index.values 获取列索引值)
axes获取行及列索引
ndim获取 Series 的数据维度( Series 是一维数组)
shape获取 DataFrame 数据结构
size获取 Series 的数据类型

DataFrame 数据结构的属性和 Series 的部分属性内容是相同的,但因为是二维数据结构,也有自己独特的一些属性,下面我们通过代码逐一介绍。

实例:我们通过定义一个 DataFrame 数据结构,然后分别演示上面的属性操作。

# 引入pandas
import pandas as pd
# 定义一个dataframe数据结构的对象
data={'bookname':['python入门','python编程','python实战'],
'author':['Eric','张健','刘辉'],
'price':['49.9','36.5','67.4']}
frame_obj=pd.DataFrame(data)
print(frame_obj)

# --- 输出结果 ---
bookname author price
0 python入门 Eric 49.9
1 python编程 张健 36.5
2 python实战 刘辉 67.4

具体的属性操作:

# values 属性
print(frame_obj.values)
#--- 输出结果 ---
[['python入门' 'Eric' '49.9']
['python编程' '张健' '36.5']
['python实战' '刘辉' '67.4']] # 一个ndarray类型的对象

# index 属性
print(frame_obj.index.values)
#--- 输出结果 ---
[0 1 2] # 这是一个一维数组 是dataframe数据对象的行索引值

# columns 属性
print(frame_obj.columns.values)
#--- 输出结果 ---
['bookname' 'author' 'price'] # 这是一个一维数组 是dataframe数据对象的列索引值

# axes 属性
print(frame_obj.axes)
#--- 输出结果 ---
[RangeIndex(start=0, stop=3, step=1), Index(['bookname', 'author', 'price'], dtype='object')] # 对应的行索引和列索引

# ndim 属性
print(frame_obj.ndim)
#--- 输出结果 ---
2 # 2正式dataframe的数据维度

# shape 属性
print(frame_obj.shape)
#--- 输出结果 ---
(3, 3) # 该dataframe数据结构是3行3列的

# size 属性
print(frame_obj.size)
#--- 输出结果 ---
9 # 数据的个数,二维3乘以3是9个数据

3.2 DataFrame 常用的操作方法

接下来我们一起看下dataframe的常用方法,见证这个二维数据的厉害吧。

常用函数函数描述
DataFrame()创建一个DataFrame数据结构的对象
head()用于查看数据集的前n行
info()快速查看数据的描述
tail()用于查看数据集的后n行
T转置函数
sum()求和函数

下面我们分别看一下每个方法的具体操作实例:

DataFrame() 方法

该方法用于创建 DataFrame 对象,我们可以指定行索引和列索引创建,还可以通过字典进行创建。下面代码中分部创建一个4*4的 DataFrame。

# 1.通过传入数据,行索引,列索引进行创建
df1=pd.DataFrame([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]],
index=list('ABCD'),columns=list('ABCD'))
print(df1)
# --- 输出结果 ---
A B C D
A 1 2 3 4
B 5 6 7 8
C 9 10 11 12
D 13 14 15 16
# 第一个参数是存放在DataFrame里的数据,第二个index是行名索引,第三个columns是列索引,注意:这里index,columns的list长度要和对应的行和列索引数量一致,不然会报错。

# 1.通过字典进行创建
data={'A':['1','2','3','4'],
'B':['5','6','7','8'],
'C':['9','10','10','11'],
'D':['12','13','14','15']}
df2=pd.DataFrame(data)
print(df2)
# --- 输出结果 ---
A B C D
0 1 5 9 12
1 2 6 10 13
2 3 7 10 14
3 4 8 11 15

head() 方法

该方法通过传入的值,查找数据的的前n行

# 2.head(2) 取前两行数据
data={'A':['1','2','3','4'],
'B':['5','6','7','8'],
'C':['9','10','10','11'],
'D':['12','13','14','15']}
df2=pd.DataFrame(data)
print(df2.head(2))

# --- 输出结果 ---
A B C D
0 1 5 9 12
1 2 6 10 13
# 这里我们输出了前两行的数据

info() 方法

通过该方法,可以看到数据的描述信息摘要,在对数据进行探索性分析时比较有用,比如行和列数,每个值的类型,以及非空值的数量。

# 3.info() 取前两行数据
data={'A':['1','2','3','4'],
'B':['5','6','7','8'],
'C':['9','10','10','11'],
'D':['12','13','14','15']}
df2=pd.DataFrame(data)
print(df2.info())

# --- 输出结果 ---
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 A 4 non-null object
1 B 4 non-null object
2 C 4 non-null object
3 D 4 non-null object
dtypes: object(4)
memory usage: 256.0+ bytes
None

tail() 方法

通过传入的值,返回 DataFrame 对象的后几行数据

# 4.tail(2) 取后两行数据
data={'A':['1','2','3','4'],
'B':['5','6','7','8'],
'C':['9','10','10','11'],
'D':['12','13','14','15']}
df2=pd.DataFrame(data)
print(df2.tail(2))

# --- 输出结果 ---
A B C D
2 3 7 10 14
3 4 8 11 15
# 这里输出的是后两行数据

T 方法

直接字母 T,可以将 DataFrame 的行和列进行置换。

# 5.T 进行置换行和列
data={'A':['1','2','3','4'],
'B':['5','6','7','8'],
'C':['9','10','10','11'],
'D':['12','13','14','15']}
df2=pd.DataFrame(data)
print(df2)
# --- 输出结果 ---
A B C D
0 1 5 9 12
1 2 6 10 13
2 3 7 10 14
3 4 8 11 15 # 原dataframe

print(df2.T)
# --- 输出结果 ---
0 1 2 3
A 1 2 3 4
B 5 6 7 8
C 9 10 10 11
D 12 13 14 15 # 进行置换后,行和列位置变换

sum() 方法

sum() 是求和方法,默认是对每列求和,传入 1 也就是 sum(1) ,是对每行进行求和。

# 1.sum()对每列求和,sum(1)对每行进行求和
data={'A':[1,2,3,4],
'B':[5,6,7,8],
'C':[9,10,11,12],
'D':[13,14,15,16]}
df2=pd.DataFrame(data)
print(df2)
# --- 输出结果 ---
A B C D
0 1 5 9 13
1 2 6 10 14
2 3 7 11 15
3 4 8 12 16 # 原dataframe数据

print(df2.sum())
# --- 输出结果 ---
A 10
B 26
C 42
D 58
dtype: int64 # 对每列进行求和

print(df2.sum(1))
# --- 输出结果 ---
0 28
1 32
2 36
3 40
dtype: int64 # 对每行进行求和

4. 小结

该小节内容讲述了 Pandas 库中的第二个重要数据结构 DataFrame ,它作为二维数据结构,拥有 Series 之外的独特属性和方法内容。本节课程的重点如下:

  • DataFrame 数据结构的常用属性;
  • DataFrame 数据结构的常用操作方法;

图片描述