Python数据分析库-Pandas在数据分析中的知识点(二)

各位客官姥爷好,欢迎回来。上节我们总结了Pandas在数据分析应用过程的部分知识点,我们这节紧接着这些内容,再来看一些常见的用法。

01

 向量运算

我们这边先新建一个Dataframe

import pandas as pddf = pd.DataFrame({"地区": ["A区","B区", "C区"], "前半年销量": [3500, 4500,3800], "后半年销量": [3000, 6000,5000], "单价": [10, 18, 15]})df

1. 向量的加法运算

有两种方式, 一种是利用add()函数: a.add(b) 表示a与b之和, 另一种是直接利用加法运算符号"+"。两种方式相等价。

#第一种方式: 利用add()函数 # df["总销量"] = df["前半年销量"].add(df["后半年销量"])#第二种方式: "+" df["总销量"] = df["前半年销量"] + df["后半年销量"] df

2. 向量减法运算

同样有两种方式: 一种是用sub()函数, A.sub(B)表示A-B, 另一种是采用减法运算符 "-"

#函数法: 注意A.sub(B)表示A-B df["销量增长"] = df["后半年销量"].sub(df["前半年销量"]) #运算符: "-" df["销量增长"] = df["后半年销量"] - df["前半年销量"] df

3. 向量的乘法运算

同样是两种方式: 一种是采用mul()函数: A.mul(B)表示: A与B之积, 另一种则是乘法运算符 "*"

#函数法: A.mul(B) df["前半年销售额"] = df["前半年销量"].mul(df["单价"]) #运算符: "*" df["后半年销售额"] = df["后半年销量"] * df["单价"] df

4. 向量的除法运算

同样是两种: 一种是采用div()函数: A.div(B)表示: A除以B, 第二种则是采用除法运算符"/"

#函数法 df["前半年销量1"] = df["前半年销量"].div(100) #运算符法 df["前半年销量2"] = df["前半年销量"] / 1000 df

5. 其他运算

1)取整和取余

#取整符号: "//" df["后半年销量1"] = df["后半年销量"] // 1000 #取余符号: "%" df["前半年销量1"] = df["前半年销量"] // 100 % 10 df

2)聚合运算

采用聚合函数对一组数据进行运算, 并返回单个值。比如最大值max()函数,最小值min()函数, 平均值mean()函数。需要注意的是聚合函数的特性:运算时会忽略缺失值

#求前半年销量最大值df1 = df["前半年销量"].max()#求后半年销量最小值df2 = df["后半年销量"].min()#求单价的平均值df3 = df["单价"].mean()df1, df2 ,df3

(4500, 3000, 14.333333333333334)

02

数据标准化

数据标准化有常用的几种方法:0-1标准化、z-score标准化、对数标准化、倒数标准化、比例标准化等。在这里主要对0-1标准化进行说明。

0-1标准化(也叫min-max标准化或离差标准化),是对原始数据进行线性变换,使其结果映射成[0,1]区间的值。

其计算公式为: 新值 = (当前值- 最小值) / (最大值 - 最小值)

import pandas as pd df = pd.DataFrame({"地区": ["A区","B区", "C区", "D区", "E区", "F区"], "销量": [3500, 4500,3800,3000, 6000,5000]}) #利用公式对原始数据进行0-1标准化处理 df["0-1"] = (df["销量"] - df["销量"].min()) / (df["销量"].max() - df["销量"].min()) df

03

 数据分组

数据分组是根据研究需求,对原始数据按照某种标准划分为不同的组别,目的是观察数据的分布特征。

通常会在数据分组后再计算出各组中数据出现的的频数,最终形成频数分布表。

pandas中数据分组采用的函数是cut(x, bins, right = True, labels = None)函数:

第一个参数x指的是要分组的数据

第二个参数bins指的是划分标准, 也就是定义组的上限与下限

第三个参数right = True表示右边闭合, 左边不闭合; 当right = False时表示右边不闭合, 左边闭合, 默认为True.

第四个参数则是自定义分组的内容

import pandas as pddf = pd.DataFrame({"地区": ["A区","B区", "C区", "D区", "E区", "F区", "G区"], "单价": [ 8 , 20, 15, 7, 34, 25, 30]})#对单价进行编组: (5,15),(15,25),(25,35)bins = [5, 15, 25, 35]#利用cut()函数对单价进行分组, 并添加至原数据表中df["分组"] = pd.cut(df.单价, bins)df

自定义labels:

import pandas as pddf = pd.DataFrame({"地区": ["A区","B区", "C区", "D区", "E区", "F区", "G区"], "单价": [ 8 , 20, 15, 7, 34, 25, 30]})bins = [5, 15, 25, 35]#自定义labelslabels = ["15以下", "15到25", "25以上"]df["分组"] = pd.cut(df.单价, bins, labels = labels)df

04

字符转日期

在Pandas中字符类型转换成日期格式使用to_datetime函数:to_datetime(arg, format = None)。

第一个参数arg则是需要转化的字符串, 比如"2018/09/01"

第二个参数format则是原日期的格式, 比如"2018/09/01"的格式为 "%Y/%m/%d"

常用的格式有:

%y表示两位数的年份,

%Y表示四位数的年份,

%m表示月份,

%d表示月中的某一天,

%H表示24小时制时数,

%I表示12小时制时数,

%M表示分钟,

%S表示秒

import pandas as pd df = pd.DataFrame({"name":["A","B","D"], "BirthDate": ["2011/10/20","2009/3/5","2010/5/6"]}) #转成日期格式 df["BD"] = pd.to_datetime(df.BirthDate,format = "%Y/%m/%d") df
#查看转化后的数据类型 df.dtypes

05

日期转字符

要将日期按照指定的格式输出成字符类型, 在Pandas里需要借助datetime模块中datetime类的strftime()方法实现。

strptime(date_string, format)方法中有两个参数, 第一个参数则是要转化的字符串, 第二个参数则为字符串中日期的格式

import pandas as pdfrom datetime import datetimedf = pd.DataFrame({"name":["A","B","D"], "BirthDate": ["2011/10/20","2009/3/5","2010/5/6"]})#转化为日期格式df["BD"] = df["BirthDate"].apply(lambda x: datetime.strptime(x, "%Y/%m/%d"))#日期格式化df["BD1"] = df["BD"].apply(lambda x: datetime.strftime(x, "%d-%m-%Y %H:%M:%S"))df

06

日期的提取

从日期格式中提取日期的部分内容, 比如提取年份, 月份等。

用法:转换为日期格式的列.dt.要提取的属性。

import pandas as pdfrom datetime import datetimedf = pd.DataFrame({"name":["A","B","D"], "BirthDate": ["2011/10/20","2009/3/5","2010/5/6"]})df["BD"] = df["BirthDate"].apply(lambda x: datetime.strptime(x, "%Y/%m/%d"))df["year"] = df["BD"].dt.yeardf["month"] = df["BD"].dt.monthdf["day"] = df["BD"].dt.daydf["hour"] = df["BD"].dt.hourdf["minute"] = df["BD"].dt.minutedf["second"] = df["BD"].dt.seconddf["weekday"] = df["BD"].dt.weekdaydf

07

数据记录的筛选

1. 关系运算符

用法:df[df.字段名 关系运算符 数值],比如筛选年龄大于30岁的记录。

import pandas as pddf = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28" ]})df_new = df["Surname_Age"].str.split("_", expand =True)df_new.columns = ["Surname","Age"]df_mer= pd.merge(df, df_new, left_index =True, right_index=True)df_mer.drop("Surname_Age", axis = 1, inplace =True)#将Age字段数据类型转化为整型df_mer["Age"] = df_mer["Age"].astype(int)#抽取Age中大于30的记录df_mer[df_mer.Age >30]

2. 范围运算符

用法:df[df.字段名.between(s1, s2)], 注意既包含s1又包含s2,。

比如筛选年龄大于等于23小于等于28的记录。

df_mer[df_mer.Age.between(23,28)]

3. 逻辑运算: 与(&) 或(|) 非(not)

#比如上面的范围运算#df_mer[df_mer.Age.between(23,28)]#就等同于#df_mer[(df_mer.Age >= 23) & (df_mer.Age <= 28)]df_mer[(df_mer.Age >= 23 ) & (df_mer.Age <= 28)]

4. 字符匹配:

用法:df[df.字段名.str.contains("字符", case = True, na =False)]

其中contains()函数中case=True表示区分大小写, 默认为True; na = False表示不匹配缺失值.

import pandas as pd import numpy as np df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28"],"SpouseAge":[np.NaN,"32",np.NaN]}) #匹配SpouseAge中包含2的记录 df[df.SpouseAge.str.contains("2",na = False)]

当na改为True时, 结果为:

5. 缺失值匹配:

用法:df[pd.isnull(df.字段名)]表示匹配该字段中有缺失值的记录。

import pandas as pd import numpy as np df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28"],"SpouseAge":[np.NaN,"32",np.NaN]}) #匹配SpouseAge中有缺失值的记录 df[pd.isnull(df.SpouseAge)]

08

数据记录的合并

使用concat()函数可以将两个或者多个数据表的记录合并一起。

用法:pandas.concat([df1, df2, df3.....])

import pandas as pd df1 = pd.DataFrame({"ID": ["A10006","A10001"],"Salary": [12000, 20000]}) df2 = pd.DataFrame({"ID": ["A10008"], "Salary": [10000]}) #使用concat()函数将df1与df2的记录进行合并 pd.concat([df1, df2])

以上就是本次的分享,欢迎各位客官姥爷关注我,方便您第一次时间收到【干货】!

(0)

相关推荐

  • Prophet: 时间序列预测库

    prophet是facebook开源的python预测库,该库的api设计与sklearn很像,也是分为fit方法和predict方法. prophet库可以帮助我们进行 Saturating For ...

  • Python数据分析库-Pandas在数据分析中的知识点(一)

    各位客官姥爷好,欢迎回来.上节我们简单介绍了Pandas名称的由来,以及后续的安装工作.相信大家都有跟着一起安装,既然装好了那就用起来吧,本节我们来看看Pandas在数据分析过程会涉及到哪些常用的知识 ...

  • Python数据分析库-Pandas的介绍与安装

    各位客官姥爷好,欢迎回来.我们之前的内容一直围绕着正则表达式展开,这次我们就讲点别的.既然我的公众号名称叫做转行学数据分析,那么我们今天就来讲讲数据分析有关的,一个常见的Python的数据分析库--P ...

  • 0.052秒打开100GB数据?这个Python开源库这样做数据分析

    来自公众号:AI科技大本营 作者:CSDN App 许多组织都在尝试收集和利用尽可能多的数据,以改善其经营方式,增加收入和提升影响力.因此,数据科学家面对50GB甚至500GB大小的数据集情况变得越来 ...

  • Python数据分析库-Numpy库在数据分析中的知识点(一)

    各位客官姥爷好,欢迎回来.细心的你们肯定发现在pandas知识点(二)一文中用到了numpy库,numpy库也是我们这些数据人经常用的python库之一,那么numpy又有哪些知识点呢?我们本节先来看 ...

  • Python数据分析库-Numpy库在数据分析中的知识点(二)

    各位客官姥爷好,欢迎回来.上节我们了解numpy中数组的创建方法,这节我们来看看数组都有哪些常用的属性,以及数组的浅拷贝与深拷贝的用法. 01  数组的属性 0.声明一个numpy的数组 np.ran ...

  • Python数据分析库-Numpy库在数据分析中的知识点(三)

    各位客官姥爷好,欢迎回来.上节我们了解了numpy数组的属性以及浅拷贝和深拷贝,这节我们来看看数组的其他用法. 01  改变数组的维度 0. 声明一个numpy的数组 x = np.random.ra ...

  • Python数据分析库-Numpy中矩阵的点积与乘法

    各位客官姥爷好,欢迎回来.上节我们了解了numpy中数组用法,听说numpy也可以创建矩阵,那我们这节来试试吧. 01  矩阵的用法 1. 创建矩阵的方法 #np.mat方法支持以下三种用法a = n ...

  • Python数据分析库有哪些?常见分类!

    众所周知,Python前景好.需求量大.薪资高.就业岗位多,除了基本的开发工作之外,还可以从事人工智能.数据分析.网络爬虫等岗位.那么说起数据分析,你知道Python常用数据分析库有哪些吗?我们一起来 ...

  • Python常用数据分析库有哪些?五大类介绍

    众所周知,Python前景好.需求量大.薪资高.就业岗位多,除了基本的开发工作之外,还可以从事人工智能.数据分析.网络爬虫等岗位.那么说起数据分析,你知道Python常用数据分析库有哪些吗?我们一起来 ...