实训札记


NumPy

以下所有统计函数都可以指定轴

astype() ndarry对象的数据类型可以通过astype()方法进行转换.

数组运算




切片和索引

多维数组的切片和索引

布尔型索引的基本使用

布尔型索引只能拿到位置为True的信息

常用的一元函数

常用的二元函数

where NumPy的where(condition,x,y)函数是三元表达式x if condition else y的矢量化版本.

.sort() 对数组排序(在原数组上进行操作,默认通过最后一个轴排序).
.all() 判断数组中所有元素是否都满足条件.Y->True,N->False,只要有一个为False,则返回值就是False.所有都为True,返回值才为True.
.any() 类似于.all(),对数组中的元素进行判断,有一个满足括号内条件的,就返回True.
np.uniqual(arr) 对数组进行去重并返回排序后的结果
np.inld(arr1,arr2) 遍历arr1中的每一个元素,判断arr1中的每一个元素是否在arr2中存在,返回值是一个布尔型数组

线性代数模块

NumPy中提供了一个用于矩阵乘法的dot()方法.

rand()

rand() 隶属于numpy.random模块,它的作用是随机生成N维浮点数组.
如果()中不给定任何参数,则返回一个0~1之间的浮点数;
random.rand(m,n),返回一个m行n列的数组,且数值都是在0~1之间;
random模块中还包括了可以生成服从多种概率分布随机数的其他函数

Pandas

series

series是一个类似于一维数组的对象,它能够保存任何类型的数据,主要由一组数据和与之相关的索引两部分组成.(series的索引位于左边,数据位于右边).

pandas的series类对象可以用以下方法构建




可以直接使用索引获取数据
获取位置索引3对应的数据
ser_obj[3]

DataFrame

DataFrame的创建


在创建DataFrame时可以为其指定列索引

可以使用列索引的方式来获取一列数据,返回的结果是一个Series对象

可以认为DataFrame对象就是由多个Series对象组成的

要想为DataFrame增加一列数,则可以通过给列索引或者列名称赋值的方式实现

del语句 删除某一列数据

可以通过data.values拿到数据

DataFrame直接索引只支持先列后行,不支持先行后列的索引方式

如果希望能完成先行后列的索引方式,需要使用lociloc方法.

算术运算与数据对齐

数据排序

按索引排序

按索引对Series进行分别排序,示例如下

按值排序

Pandas中用来按值排序的方法为sort_values(),该方法的语法格式如下:

在DataFrame中,sort_values()方法可以根据一个或多个列中的值进行排序,但是需要在排序时,将一个或多个列的索引传递给by参数才行

统计计算与描述

常用的统计计算方法

describe()方法

describe()方法,一次性输出多个统计指标,语法格式如下:

认识层次化索引

层次化索引可以理解为单层次索引的延伸,即在一个轴方向上具有多层索引.





层次化索引的操作

在使用sort_index()方法排序时,会优先选择按外层索引进行排序,然后再按照内层索引进行排序.

读写文本文件

to_csv()方法的功能是将数据写入csv文件中

read_csv()方法的功能是将csv文件中的数据读取出来,转换成DataFrame对象展示

读取txt格式的文件可以使用read_csv()函数,也可以使用read_table()函数.

to_excel()方法的功能是将DataFrame对象写入Excel工作表中.

read_excel()函数的作用是将Excel中的数据读取出来,转换成DataFrame展示

读取HTML表格数据

对于网页中的表格,可以使用read_html()函数进行读取,并返回一个包含多个DateFrame对象的列表.

读写数据库

安装connector
conda install mysql-connector-python
连接到数据库
mysql -uroot -p mysql

Pandas中的io.sql模块中提供了常用的读写数据库函数

read_sql()函数既可以读取整张表,又可以执行sql语句.

通过create_engine()函数创建链接时,需要指定格式如下:'数据库类型+数据库名称://用户名:密码@机器地址:端口号/数据库名'
to_Sql()方法的功能时将Series或DataFrame对象以数据表的形式写入数据库中

数据预处理

空值和缺失值的处理

fillna()

通过fillna()方法填充常量的实例如下:df_obj.fillna('66.0')

使用fillna()方法进行指定填充

df_obj.fillna({'A':4.0,'B':5.0}) (通过字典进行填充,key->缺失列的名称,value->填充的值)

使用fillna()方法进行前向填充

df_obj.fillna(method='ffill'),效果如下:

将含有缺失值的行(axis=0,默认是按行删除)或列(axis=1)进行删除

df_obj.dropna()

重复值的处理

Panads提供了两个函数专门用来处理重复值,分别为duplicated()drop_duplicates()方法.

duplicated()(用于判断)方法的格式如下:
duplicated(subset=None,keep='first')

drop_duplicates()(用于更改)方法的格式如下:
drop_duplicates(subset=None,keep='first',inplace=False)

上述方法中,inplace参数接收一个布尔类型的值,表示是否替换原来的数据,默认为False.如果是False,则返回一个新的数据,若为True,则会在原数据上进行更改.

异常值的处理

正态分布

例题(通过3σ)
定义一个函数,通过3σ的方式判断是否是异常值,如果是异常值,则将异常值返回.

点击查看详细代码
def three_sigma(ser):
    # 求平均值
    mean_value = ser.mean()
    # 标准差
    std_value = ser.std()
    # 判断条件
    rule = (mean_value - 3 * std_value > ser) | (mean_value + 3 * std_value < ser)
    # 根据条件完成数据的索引,需要先获取数据的索引,然后再通过索引获取数据
    index = np.arange(ser.shape[0])[rule]
    outrange = ser.iloc[index]
    # 返回数据
    return outrange

箱型图


例题(通过箱型图)判断是否有异常值


判断代码如下:
df.boxplot(column=['A','B','C','C'])
结果为:

更改数据类型

创建Pandas数据对象时,如果没有明确指出数据的类型,则可以根据传入的数据推测出来,并且通过dtype属性进行查看.

还可以在创建Pandas对象时明确地指定数据的类型,即使用构造方法中地dtype参数指定数据类型

通过astype()方法可以强制转换数据的类型

astype()方法存在一些局限性,当待转换的数据中存在非数字以外的字符,使用astype()方法就会出错.
to_numeric()函数的出现解决了这个问题.
to_numeric()函数可以将传入的参数转换为数值类型

数据合并

轴向堆叠数据

concat()函数可以沿着一条轴将多个对象进行堆叠,其使用方式类似数据库中的数据表合并.

objs:需要进行合并的对象,要放在一个元组或是列表中

主键合并数据

主键合并类似于关系型数据库的连接方式,它是指根据一个或多个键将不同的DataFrame对象连接起来,大多数是将两个DataFrame对象中重叠的列作为合并的键.
Pandas中提供了用于主键合并的merge()函数.

join()方法能够通过索引或指定列来连接多个DataFrame对象.

重塑层次化索引

unstack()方法可以将数据的行索引转换为列索引.


轴向旋转

转换前

转换后

pivot()方法的作用是,根据给定的行或列索引重新组织一个DataFrame对象

重命名轴索引

rename()方法的作用:重命名个别列索引或行索引的标签或名称