这是一篇机器学习的介绍,本文不会涉及公式推导,主要是一些算法思想的随笔记录。
适用人群:机器学习初学者,转AI的开发人员。
编程语言:Python
自己在项目中经常用到pandas,尤其是数据分析与数据预处理这两部分,自己最直接的感受就是pandas像是SQL+excel,当然,pandas的功能远不止这些。
DataFrame和Series的区别
DataFrame和Series是Pandas的两大基本类型,区别如下:
DataFrame可以理解为Excel中的一张表;
Series可以理解为一张Excel表中的一行或一列数据。Series可以理解为一维数组,和一维数组不同的是,Series具有索引。
pandas常用功能
- 轻松处理浮点数据中的丢失数据(以NaN表示)以及非浮点数据
- 大小可变性:可以从DataFrame和更高维的对象插入和删除列
- 自动和显式的数据对齐:对象可以显式地与一组标签对齐,或者用户可以简单的忽略标签,让Series,DataFrame等自动对齐你的数据在计算
- 功能强大,灵活的按组功能来执行对数据集拆分申请,联合行动,对于聚合和转换数据
- 可以轻松地将其他Python和NumPy数据结构中的不同索引的数据转换为DataFrame对象
- 基于智能标签的切片,花式索引和 大型数据集的子集
- 直观的合并和连接数据集
- 数据集的灵活的重塑和旋转
- 坐标轴的分层标记(可能每个标记有多个标签)
- 强大的IO工具,用于从平面文件(CSV和分隔),Excel文件,数据库加载数据,以及从超快HDF5格式保存/加载数据
- 时间序列 - 特定功能:日期范围生成和频率转换,移动窗口统计,移动窗口线性回归,日期转换和滞后等。
下面从自己项目中遇到的一些pandas知识点整理出来:
(注:以下pd均表示pandas)
pandas设置显示格式
pandas 中float型小数很多时候会显示成科学计数法的形式,可以通过下面设置显示小数位数:
pd.set_option('display.float_format',lambda x:'%.3f'%x)
对于数据,行和列并不能显示完全,尤其是列,很多时候需要看到每列(每个特征)的情况:
#显示多少列(特征),None表示显示所有列
pd.set_option('display.max_columns',None)
#显示多少行(记录),不建议使用None,数据多会卡死
pd.set_option('display.max_rows',50)
describe()未显示所有列信息
describe()会返回基本统计量(均值、标准差、最大值、最小值)和分位数等,可以快速看到数据的分布情况,但是注意:describe()仅用于数值类型,可通过类型转换在describe()中显示:
df[['col_1'],['col_2']] = df[['col_1'],['col_2']].astype(float)
df[['col_1'],['col_2']].describe()
pandas按某列排序
参数
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’)
参数说明
- axis:{0 or ‘index’, 1 or ‘columns’}, default 0,默认按照索引排序,即纵向排序,如果为1,则是横向排序
- by:str or list of str;如果axis=0,那么by=“列名”;如果axis=1,那么by=“行名”;
- ascending:布尔型,True则升序,可以是[True,False],即第一字段升序,第二个降序
- inplace:布尔型,是否用排序后的数据框替换现有的数据框(false则修改原数据)
- kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。
- na_position : {‘first’, ‘last’}, default ‘last’,默认缺失值排在最后面
df = pd.read_csv('D:\spy.csv')
#按‘date’列升序排列
df.sort_values('date',inplace=True)
pandas随机取样sample()
机器学习中经常需要切分数据,切分数据要用到取样,对于样本足够多的情况下,常常会随机取样,会用到sample():
DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
n:取样本个数
frac:取样本占比
replace:是否允许抽样值重复
df.sample(10000)
df.sample(frac=0.1, replace=False)
pandas去重
DataFrame.drop_duplicates(subset=None, keep=‘first’, inplace=False)
- subset : 用来指定特定的列,默认所有列
- keep : **‘first’**表示保留第一次出现的重复行,是默认值。keep另外两个取值为"last"和False,分别表示保留最后一次出现的重复行和去除所有重复行。
- inplace : boolean, default False,是直接在原来数据上修改还是保留一个副本