• 一、Pandas

    导入

     

    (一)Series数据结构

    Series是一种类似于一维数组的对象,由标签(行索引)和数据组成。

    1、创建一个Series

    方法:pd.Series(),传入不同的对象即可;默认索引从0开始。

    (1)传入一个列表

    (2)指定索引

    (3)传入字典

    字典key:value,key是索引,value是数据

    2、获取Series索引

    3、获取Series的值

     

    (二)DataFrame数据结构

    Series是由一组数据与一组行索引组成的数据结构。

    DataFrame是由一组数据与一对索引(行索引、列索引)组成的表格型数据结构。

    行、列索引默认是从0开始的。

    1、创建一个DataFrame

    (1)传入一个列表

    (2)传入一个嵌套列表

    (3)指定行、列索引

    设置columns参数指定列索引;设置index参数指定行索引。

    (4)传入一个字典

    字典的key就是列索引,value就是一列数据。

     

    2、获取DataFrame行、列索引

     

    3、导入数据 read_XXX()

    主要用到的是read_XXX()方法,XXX表示导入文件的格式。

    pandas默认的行数、列数都是从0开始计数,0,1,2,3,......

    导入xlsx文件 read_excel()

    基本导入

    电脑文件路径默认使用\时,前面加上一个r避免被转义。

    指定导入表
    指定行索引
    指定列索引
    指定导入列

     

    导入csv文件 read_csv()

    直接导入
    指明分隔符号

    csv文件数据默认以逗号(,)分开。

    指明读取行数

    参数nrows表示读取前面几行。

    指定编码格式

    常见的两种编码格式:UTF-8 和 GBK,默认格式UTF-8

    指定engine

    当文件路径或者文件名包包含中文时,如果导入报错,就需要设置engine参数;当调用read_csv()方法时,默认使用C语文作为解释器,所以把C更改为Python就可以了。

     

    导入txt文件 read_table()

     

    导入sql文件 read_sql()

    4、常用信息

    (1)预览前几行 head()

    使用head()方法,括号中输入行数,默认展示前5行。

    (2)数据表大小(多少行多少列)shape

    (3)获取数据表各列数据类型 info()

     

    5、获取数值分布情况 describe()

    最小值min、最大值max、标准差std、均值mean、数量统计count

     

    (三)数据预处理

    缺失值NaN

    缺失值一般用NaN表示。

    查看 isnull()

    1.从info()中查看

    性别这列非null是3,其它列都是4,这说明性别这一列有1个null值。

    2.用isnull()方法

    判断是否有缺失值,如果有缺失值则返回True,否则返回False。

    填充 fillna()

    用fillna()方法进行填充缺失值。

    对所有缺失值填充
    指定某列填充

    使用字典指明列(key)和填充值(value)

     

    重复值

    duplicated():判断是否有重复值

    drop_duplicates() :删除重复值

    查看 duplicated()

    参数与drop_duplicates()一样。

    删除 drop_duplicates()

     

    数据类型

    数据类型主要有6种

    类型说明
    int整数
    float浮点数,即包含有小数的数
    objectPython对象,用O表示
    string_字符串,用S表示。S10表示长度为10的字符串
    unicode_固定长度的unicode类型,与字符串定义方式一样
    datetime64[ns]时间格式

    查看 dtype

    转换 astype()

    用astype()方法,括号里面指明转换的目标类型即可。

     

    索引设置

    添加索引 columns、index

    如果没有索引,默认0开始的整数做索引。df的columns参数传入列索引值;index参数传入行索引值。

    重新设置 set_index()

    重命名(修改)rename

    重置索引 reset_index

    主要用在层次化索引表中,用reset_index()方法,常用参数:level、drop、inplace

     

     

    (四)数据选择

    总结:(1)当列参数用数字时 iloc ;当列参数用文本时 loc

    (2)数字可以是一个区间,取多列,例如 [0:2],默认左闭右开。

     

    列选择 df[ ] 、iloc[ : , ]

     

    行选择 loc[ ]、iloc[ ]

     

    行列同时选择

    是指行和列相交的部分。

    (五)数值操作

    1.替换 replace

    一对一 replace(A,B)

    replace(A,B) 表示将A替换成B。

    多对一 replace([A,B],C)

    replace([A,B],C)表示将A、B替换成C。

    多对多 replace({"A":"a","B","b"})

    replace({"A":"a","B","b"})表示将A替换成a ,B替换成b

     

    2.排序 sort_values

    sort_values()方法,by指明要排序的列名,ascending表示升序(默认)还是降序排列;默认为True升序。

    一列排序 sort_values()

    多列排序 sort_values()

    以列表形式指明要排序的多列列名、每列的排序方式。

    缺失值的排序 na_position

    当有缺失值时,na_position参数对显示位置进行设置,默认值为last,表示将缺失值显示在最后;first表示将缺失值显示在前面。

     

    3.排名 rank

    rank()方法主要有两个参数,ascending指明升序(默认)还是降序;method表示待排列值有重复值时的处理方法。

    averge 重复值的平均排名

    first 重复值出现的先后顺序

    min 重复值对应的最小排名

    max 重复值对应的最大排名

    重复值102分别占第2和第3名,平均值为2.5

     

    4.删除 drop

    删除列 drop(axis=1)

    drop()方法,指明删除的列名或者列的位置(第几列);

    删除行 drop(axis=0)

    drop()方法,与删除列类似,指出删除的行名或行的位置;

    删除特定行

    我们不能直接删除满足条件的值,而是把不满足条件值筛选出来作为新的数据源,这样就把要删除的行过滤掉了。

    例如:要删除ID大于103的行,则把ID小于103的行筛选出来作为新的数据源。

     

    5.计数 value_counts

    value_counts()方法,对某些值出现的次数进行计数。

    6.获取唯一值 unique

    unique()方法,获取某一列的唯一值。

    7.查找数值 isin

    isin()方法,某列中是否包含某个值或多个值,多个值时用列表。如果包含返回True,否则返回False

    8.切分区间 cut、qcut

    例如:(0,3] 即 0< X ≤ 3 ,表示大于0,小于等于3

     

    9.插入行、列 insert、df[ ]

    pandas中没有专门插入行的方法;可以把待插入的行当作新表,然后两个表在纵轴方向进行拼接。

    插入新的列的方法如下:

    10.行列互换(转置) T

    行列互换(又称转置),就是将行数据转换到列方向上,将列数据转换到行方向上。

     

    11.索引重塑 stack、unstack

    索引重塑就是将原来的索引重新构造。

    12.长宽表转换

    前提条件是需要公共列。

    宽表转长表 melt()

    id_vars 转换时保持不变的列;

    var_name 原宽表中除了id_vars中列名外的列名,重新命名为一个新的列名(写入原表中所在的列名称);

    value_name 原宽表中除了id_vars中列外的数据,重新命名为一个新的列名(写入数据)。

     

    长表转宽表 pivot_table

    将长表转换成宽表就是宽表转长表的逆过程,常用的方法是数据透视表。

     

    13.apply、applymap函数

    在DateFrame中与map()函数类似的有两个,一个是apply()函数,另一个是applymap()函数,需要与匿名函数lambda结合使用。

     

     

    (六)数据运算

    算术运算

    算术运算就是基本的加、减、乘、除运算,是对应元素进行加、减、乘、除运算。

     

    比较运算

    常规的大于、等于、小于之类的运算,只是在列与列之间进行比较。

     

    汇总运算

    算术和比较运算都是在列与列之间进行的,有多少行的值就会返回多少个结果,而汇总运算是将数据进行汇总返回一个汇总以后的结果值。

    1、非空值计数 count

    默认计算每一列的非空数值的个数。可设置axis=1,计算每一行的非空数值的个数。

    2、求和 sum

    默认对每一列进行求和;可设置axis=1,对每一行进行求和。

    3、均值 mean

    默认对每一列进行求均值运算;可设置axis=1,对每一行进行求均值。在Excel中是average()函数。

    4、最大值(索引) max、idxmax

    默认计算每一列最大值,若axis=1,则计算每一行最大值。

    5、最小值(索引) min、idxmin

    默认计算每一列最小值,若axis=1,则计算每一行最小值。

    6、中位数 median

    7、众数 mode

    8、方差 var

    9、标准差 std

    10、分位数 quantile

    11、相关性运算 corr

    相关性常用来衡量两个事物之间的相关程度。相关性计算就是计算相关系数,比较常见的皮尔逊相关系数corr()。

     

     

    (七)时间序列

    1.获取当前日期时间

    2.指定日期和时间格式

    使用strtime()函数自定义时间和日期的格式。

    H 24小时制,I 12小时制,M 两位数的分 ,S 秒

    w 星期几,从0开始,U每年的第几周,周日是每周第1天 ,W每年的第几周,周一是每周第1天

    3.字符串和时间格式转换

    4.时间索引

    选取某一时间或者某一时间段内对应的值。

    上面的方法只适用于索引是时间的情况下。如果时间在普通列,那么利用布尔索引对非索引列进行比较来选取。

    5.时间运算

    (八)数据分组

    利用groupby()方法

    分组键是列名

    运行groupby()返回的不是一个DataFrame对象,而是一个DataFrameGroupBy对象,需要对这些分组数据进行汇总计算 以后才会显示出来。

    分组后对数据进行汇总运算的操作称为聚合,使用的函数称为聚合函数。

    常用聚合函数:count、sum、mean、size、max、min、peak、std

    按照一列分组

    按照多列分组

    无论分组键是一列还是多列,都是对所有可计算列进行计算。如果只想要其中一列或几列,可以通过列索引取出。

    分组键是Series

    将DataFrame中一列取出来就是一个Series,例如df["客户分类"]

    分组键是列名与分组键是Series,计算结果都一样,根本没有区别。

    agg/aggregate方法

    前面用到的聚合函数都是直接在DataFrameGroupBy对象上调用,这样分组以后,所有列都是同一种汇总运算,且一次只能使用一种汇总方式。aggregate可以一次使用多种汇总方式。

    在Pandas中,agg和aggregate两个函数指向同一个方法,使用时写任意一个即可。

     

    分组结果重置索引

    reset_index()方法

    数据透视表

    数据分组是在一维(行)方向上进行拆分,而数据透视表是在行、列方向上同时拆分。

    pivot_table()方法

    参数解释:其中有4个最重要的参数index、values、columns、aggfunc

    在所有参数中,values、index、columns最为关键,它们分别对应excel透视表中的值、行、列。

    最后补充两个函数

    aggfunc传入列表或字典

     

    重置索引

     

    (九)多表拼接

    横向

    横向拼接是根据公共列在横向上进行两个表的拼接,主要利用merge()方法

    连接表的类型

    一对一

    就是两表的公共列是一对一的

    多对一

    两表公共列不是一对一的,其中一个表的公共列有重复值,另一个表的公共列是唯一的。

    多对多

    两表的公共列不是一对一的,且两表中的公共列都有重复值,多对多相当于多个多对一连接。

    连接键的类型

    连接键是公共列(默认)
    指定连接键用on
    指定左右连接键

    当两个表中没有公共列,即列名称不同(实际值是一样的),分别指定左、右表连接键的列名,参数分别是left_on、right_on。

    连接键是索引列

    索引列不算是真正的列,当公共列是索引列时,就要把索引当作连接键,分别是left_index、right_index

    连接方式

    前面例子是比较标准的表,左表中的公共列的值可以在右表对应的公共列找到,右表公共列的值也可以在左表对应的公共列中找到,但现实业务中很多是互相找不到的,这时候用参数how来指明具体的连接方式。

    内连接(默认) inner

    取两个表的公共部分。

    左连接 left

    以左表为基础,右表往左表上拼接,没有的值用NaN填充。

     

    右连接 right

    以右表为基础,左表往右表上拼接,没有的值用NaN填充。

    外连接 outer

    取两个表的并集。

     

    重复列名处理

     

    纵向

    横向拼接是两个表根据公共列在水平方向上进行拼接,而纵向拼接是在垂直方向进行拼接,利用concat()方法。

    普通合并

    索引设置

    pd.concat()默认保留原表的索引,如果生成新的索引(不保留原表索引)使用参数 ignore_index=True

    重叠数据合并

    参考前面的(三)数据预处理→重复值处理方法。

     

    (十)结果导出

    xlsx文件

    使用df.to_excel()方法

    文件保存到多个Sheet

    使用pd.ExcelWriter()函数

    csv文件

    使用df.to_csv()方法

     

     

    (十一)数据可视化

     

     

    二、Pandas其它

    表格对齐

    求某一列最大值的行数据

    取出第一行和最后一行

    取得一行数据

    获取行列方式

    pandas中日期与字符串互转

    字符串转日期 pd.to_datetime

    日期转成字符串 .strftime("%Y-%m-%d")

     

    按日期索引进行筛选处理