Pandas DataFrame对象的用法(非常详细)
Pandas 是 Python 数据分析中重要的库,而 Series 和 DataFrame 是 Pandas 库中两个重要的对象,也是 Pandas 中两个重要的数据结构:
本节将主要介绍 DataFrame 对象。DataFrame 对象是 Pandas 库中的一种数据结构,它是由多种类型的列组成的二维表数据结构,类似于 Excel、SQL 或 Series 对象构成的字典。
DataFrame 是最常用的 Pandas 对象,与 Series 对象一样支持多种类型的数据。
DataFrame 对象既有行索引,又有列索引,可以看作是由 Series 对象组成的,只不过这些 Series 对象共用一个索引,如下图所示。

图 1 图解DataFrame对象(学生成绩表)
处理 DataFrame 对象数据时,用 index 表示行,用 columns 表示列更直观。用这种方式迭代 DataFrame 对象的列,代码更易读懂。
【实例 1】首先创建 DataFrame 对象,然后使用 for 循环遍历 DataFrame 对象数据,输出成绩表的每一列数据,程序代码如下:

图 2 遍历DataFrame对象数据
从运行结果得知:第一组数据为原始数据,即 DataFrame 对象,其余数据其实是 Series 对象,这也更进一步说明了 DataFrame 对象是由 Series 对象组成的。那么,Pandas 为什么要提供这两种数据结构呢?其主要目的就是使代码易读,使操作更加方便。
下面通过两种方法来创建 DataFrame 对象,即通过列表和字典。

图 3 通过列表创建成绩表
【实例 3】通过字典创建成绩表,项目包括语文、数学、英语和班级,程序代码如下:

图 4 通过字典创建成绩表
在上述代码中,“班级”的 value 值是单个数据,所以为每行都添加了相同的数据“高一7班”。
下面先简单介绍几个重要且常用的属性如下表所示:
DataFrame 对象常用的函数如下表所示:
- Series:带标签的一维同构数组;
- DataFrame:带标签的,大小可变的,二维异构表格;
本节将主要介绍 DataFrame 对象。DataFrame 对象是 Pandas 库中的一种数据结构,它是由多种类型的列组成的二维表数据结构,类似于 Excel、SQL 或 Series 对象构成的字典。
DataFrame 是最常用的 Pandas 对象,与 Series 对象一样支持多种类型的数据。
图解DataFrame对象
DataFrame 对象是一个二维表数据结构,是由行和列数据组成的表格。DataFrame 对象既有行索引,又有列索引,可以看作是由 Series 对象组成的,只不过这些 Series 对象共用一个索引,如下图所示。

图 1 图解DataFrame对象(学生成绩表)
处理 DataFrame 对象数据时,用 index 表示行,用 columns 表示列更直观。用这种方式迭代 DataFrame 对象的列,代码更易读懂。
【实例 1】首先创建 DataFrame 对象,然后使用 for 循环遍历 DataFrame 对象数据,输出成绩表的每一列数据,程序代码如下:
# 导入pandas模块 import pandas as pd # 解决数据输出时列名不对齐的问题 pd.set_option('display.unicode.east_asian_width', True) # 创建列表 data = [[110,105,99],[105,88,115],[109,120,130]] index = [0,1,2] columns = ['语文','数学','英语'] # 创建DataFrame对象,即表格数据 df = pd.DataFrame(data=data, index=index,columns=columns) print(df) # 遍历DataFrame对象的每一列 for col in df.columns: series = df[col] print(series)运行程序,结果如下图所示:

图 2 遍历DataFrame对象数据
从运行结果得知:第一组数据为原始数据,即 DataFrame 对象,其余数据其实是 Series 对象,这也更进一步说明了 DataFrame 对象是由 Series 对象组成的。那么,Pandas 为什么要提供这两种数据结构呢?其主要目的就是使代码易读,使操作更加方便。
创建DataFrame对象
创建 DataFrame 主要使用 Pandas 的 DataFrame 类,语法如下:pandas.DataFrame(data,index,columns,dtype,copy)
- data:表示数据,可以是数组、Series 对象、列表、字典等;
- index:表示行标签(索引);
- columns:表示列标签(索引);
- dtype:表示每一列数据的数据类型,其与 Python 数据类型有所不同,如 object 数据类型对应的是 Python 的字符串型。下表所示是 Pandas 数据类型与 Python 数据类型的对应。
Pandas dtype | Python type |
---|---|
object | str |
int64 | int |
float64 | float |
bool | bool |
datetime64 | datetime64[ns] |
timedelta[ns] | NA |
category | NA |
- copy:用于复制数据;
- 返回值:DataFrame 对象。
下面通过两种方法来创建 DataFrame 对象,即通过列表和字典。
1) 通过列表创建DataFrame对象
【实例 2】通过列表创建成绩表,包括语文、数学和英语,程序代码如下:# 导入pandas模块 import pandas as pd # 解决数据输出时列名不对齐的问题 pd.set_option('display.unicode.east_asian_width', True) # 创建列表 data = [[110,105,99],[105,88,115],[109,120,130]] columns = ['语文','数学','英语'] # 创建DataFrame对象 df = pd.DataFrame(data=data, columns=columns) print(df)运行程序,结果如下图所示:

图 3 通过列表创建成绩表
2) 通过字典创建DataFrame对象
通过字典创建 DataFrame 对象,需要注意,字典中的 value 值只能是一维数组或简单的单个数据,如果是数组,则要求所有数组的长度一致;如果是单个数据,则每行都要添加相同的数据。【实例 3】通过字典创建成绩表,项目包括语文、数学、英语和班级,程序代码如下:
# 导入pandas模块 import pandas as pd # 解决数据输出时列名不对齐的问题 pd.set_option('display.unicode.east_asian_width', True) # 通过字典创建DataFrame对象 df = pd.DataFrame({ '语文':[110,105,99], '数学':[105,88,115], '英语':[109,120,130], '班级':['高一7班','高一7班','高一7班'] }) print(df)运行程序,结果如下图所示:

图 4 通过字典创建成绩表
在上述代码中,“班级”的 value 值是单个数据,所以为每行都添加了相同的数据“高一7班”。
DataFrame对象的重要属性和函数
DataFrame 对象是 Pandas 模块的一个重要对象,它的属性和函数非常之多。下面先简单介绍几个重要且常用的属性如下表所示:
属性 | 描述 | 举例 |
---|---|---|
values | 查看所有元素的值 | df.values |
dtypes | 查看所有元素的类型 | df.dtypes |
index | 查看所有行名,重命名行名 | df.index |
columns | 查看所有列名,重命名列名 | df.columns |
T | 行列数据转换 | df.T |
head | 查看前 n 条数据,默认 5 条 | df.head() df.head(10) |
tail | 查看后 n 条数据,默认 5 条 | df.tail() df.tail(10) |
shape | 查看行数和列数,[0] 表示行 [1] 表示列 | df.shape[0] w df.shape[1] |
info | 查看索引、数据类型和内存信息 | df.info |
DataFrame 对象常用的函数如下表所示:
函数 | 描述 | 举例 |
---|---|---|
describe | 查看每一列的统计汇总信息 | df.describe() |
count | 返回每一列中的非空值个数 | df.count() |
sum | 返回每一列的和,无法计算返回空值 | df.sum() |
max | 返回每一列的最大值 | df.max() |
min | 返回每一列的最小值 | df.min() |
argmax | 返回某一列(Series 对象)的最大值所在的自动索引位置 | df['销量'].argmax() |
argmin | 返回某一列(Series 对象)的最小值所在的自动索引位置 | df['销量'].argmin() |
idxmax | 返回最大值所在的自定义索引位置 | df.idxmax() |
idxmin | 返回最小值所在的自定义索引位置 | df.idxmin() |
mean | 返回每一列的平均值 | df.mean() |
median | 返回每一列的中位数(中位数又称中值,是统计学专有名词,是指按顺序排列的一组数据中居于中间位置的数) | df.median() |
var | 返回每一列的方差(方差用于度量单个随机变量的离散程度(不连续程度)) | df.var() |
std | 返回每一列的标准差(标准差是方差的算术平方根,反映数据集的离散程度) | df.std() |
isnull | 检查df中的空值,空值为 True,否则为 False,返回布尔型数组 | df.isnull() |
notnull | 检查df中的空值,非空值为 True,否则 False,返回布尔型数组 | df.notnull() |