Pandas
Numpy与Pandas
数组及其使用
由相同数据类型集成的聚合称为数组(Array),数组具有维度,规定在多维数组中,同一维度的元素必须长度相同,类似矩阵。
和列表不同,在Python中输出数组时,数组之间的元素使用空格进行分割。
创建数组
在创建数组前,需要先引入numpy模块。
创建数组使用numpy.array()方法,该方法返回一个数组,允许接收列表、元组等任意序列类型或序列中嵌套了一个或多个序列的数据结构。
算术运算
1.数组和数计算:类似矩阵与常数的运算,该数会去和数组中的每一个元素进行相同的计算。
2.相同形状的数组的计算:两个数组会按照位置一一对应并计算。
序列及其使用
序列(Series)是由Pandas模块提供的一种数据类型,它是一种一维、带索引的数组对象。也就是说,序列是在数组的基础上增加了索引,它拥有和数组类似的特性:单个序列中的值数据类型保持一致。
另一方面,也可以认为序列是一种类似于字典的结构:它的每个元素都由索引(index)和值(value)共同组成,但有别于字典的特征是,序列是一种有序的数据结构。 这意味着除了使用索引,我们也可以使用位置访问序列中的元素。 同时,当没有定义index时,位置(从0开始)就会自动成为索引。
创建序列
在创建数组前,需要先引入pandas模块。
创建数组使用pandas.Series()方法,该方法返回一个序列,通常需要接收至少一个参数values,或接收两个参数,另一个为index。
如果不传任何参数,将返回一个空的序列;
如果不传index,将默认从0开始生成索引。
index和values允许接收以下参数类型:
1.列表、数组等序列类型的数据结构。
2.若传入了index,则values可以接收一个常量,该常量会作为生成的序列的每一个元素的值。
访问序列
如上文所述,序列的访问方式有位置和索引两种。
1.位置访问:和列表相同,series[i]表示访问第$i+1$个元素。
2.索引访问:和字典相同,将index当作字典的key,value当作字典的value。
算术运算
数据框及其使用
数据框(DataFrame)是Pandas模块提供的一种数据结构类型。它是二维的矩阵数据表,也可以视为多个索引相同的序列的组合,即数据框的每一列都一个序列。
因此,数据框的同一列中值的数据类型相同,不同列的数据类型可以有所不同。
属性
dtypes:返回数据框的每一列的值的数据类型。values:以数组的形式返回数据框对象的值。index:以数组的形式返回数据框的行索引。
轴
用来为超过一维的数组定义的属性,对于数据框而言:
axis=0:垂直方向进行操作axis=1:水平方向进行操作
文件及其读取
读取csv文件
该方法允许接收一个必选参数文件路径和其他可选参数:
encoding:指定文件编码,防止在读取中文时出现错误和异常,通常指定为utf-8index_col:指定索引,接收一个列索引的名字,使用该列的值作为该数据框的行索引usecols:读取指定列,接收一个列名的字符串列表header:指定为None(非字符串)时,表明源数据不包含列索引(colums)。通常和names同时使用names:指定列索引,接收一个列名的字符串列表
保存CSV文件
Pandas模块中的数据框提供了成员方法to_csv()将数据框输出为csv文件。该方法接收一个必选参数输出路径(包括输出文件名和路径)和其它可选参数:
index:设置是否将索引写为第一列,接收一个布尔值,默认值为tureencoding:设置编码,通常设置为utf-8-sig
按列索引访问列数据
通过列索引访问列的方法和列表一致,返回该列对应的Series。
读取df的前五行数据
head()方法允许接收一个整型,返回数据框的前$n$行数据。当参数为空时,默认读取前$5$行。
格式转换
时间类型
datetime方法接收至多六个参数,按顺序为年、月、日、时、分、秒,其中前三者是必须的。
访问Dataframe和Series中的时间数据时,通常使用datetimeObj.dt.year,其中year也可以替换成其它字段。
对于单独的datetime对象或存储在其它数据容器中的datetime对象,不需要使用.dt。
字符串转时间
to_datetime()方法允许接收一个元素类型为字符串的Series,返回一个元素类型为Datetime的Series。
在实际应用中,参数往往为df["colname"]。
时间转字符串
strftime()方法接收一个格式化字符串,返回一个转换后的字符串。常用的格式化符号如下:

其它类型的格式转换
astype()方法允许接收一个类型标识符,将原本的数据类型转换为指定的数据类型。允许接收的类型标识符如下:
- float
- str
- int
- bool
统计函数
以下函数均对单列生效,如果要对多列进行统计,则需要将多个列名以列表的形式传入,例如dataframeObj[["colname_1",""colname_2]]。
求均值
mean()方法不接收参数,返回单列的平均值。
取值
round()方法接收一个整型,表示四舍五入后保留的小数位数。不传参数时,默认为0,即取整。
当参数为正整数时,表示保留到小数后;为负整数时保留到小数点前的十位数、百位数等。
最值
min()和max()方法返回单列最值。
求和
sum()方法返回单列所有元素的和。
元素统计
count()方法返回单列的元素数量。
中位数
median()方法返回单列元素的中位数。
结构重构
设置行索引
set_index()方法接收一个字符串,将指定列设为数据框的行索引,并返回修改后的数据框。
重置索引
reset_index()方法会重置索引为默认索引,并返回重置后的索引。
数据处理
字符串筛选
.str.contains()方法允许接收一个字符串,在指定列中筛选包含该字符串的元素,并返回一个布尔值的Series。
获取最大值的索引
数据排序
sort_value()方法允许接收以下参数,并返回排序后的数据框:
by:字符串类型,为排序参照的列的列名。ascending:布尔型,是否按升序排序。
数据清洗
需要进行清洗的脏数据按处理顺序分为数据缺失、数据异常和数据异常。
对于数据缺失,总体上有删除和填充两种思路。 对于异常值,通常使用修正或删除所在行两种思路。
统计信息
info()方法会输出数据框的各项信息,并自动打印,因此不需要手动打印。输出的信息包括以下内容:
- 数据行数
- 每列数据的列名、数据类型、非空行数
- 占用存储空间大小

空值判断
isnull()方法用于判断是否为空值,返回一个布尔类型的Series,表示是否为空。
删除行
drop()方法接收一个行索引列表,并返回删除指定行后的数据框。
填充缺失值
fillna()方法接收一个用于填充的值,并返回填充后的数据框。
判断重复值
duplicated()方法判断值和前面的是否有重复,并返回一个代表结果的布尔值Series。