Python数据分析--Pandas知识点(二)
本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘.
下面将是在知识点一的基础上继续总结.
13. 简单计算
新建一个数据表df
import pandas as pd
df = pd.DataFrame({"地区": ["A区","B区", "C区"],
"前半年销量": [3500, 4500,3800],
"后半年销量": [3000, 6000,5000],
"单价": [10, 18, 15]})
df

13.1 加法计算
有两种方式, 一种是利用add()函数: a.add(b) 表示a与b之和, 另一种是直接利用加法运算符号"+"
#第一种方式: 利用add()函数
# df["总销量"] = df["前半年销量"].add(df["后半年销量"])
#第二种方式: "+"
df["总销量"] = df["前半年销量"] + df["后半年销量"]
df
两者运算的结果都是相同的:

对于累加求和上述两种方法同样适用, 还有一种方式就是采用apply()函数, 参考文档: https://blog.csdn.net/luckarecs/article/details/72869051
这里介绍apply(func, axis = 0)函数的两个参数, apply()函数官方文档: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html?highlight=apply#pandas.DataFrame.apply
第一个参数func就是指用于每行或者每列的函数, 这里将采用lambda函数: 接收任意多个参数并返回单个计算结果.
第二个参数axis=0则表示计算行与行的数据, axis=1则表示计算列与列的数据
#由于地区不能参与运算, 因此在df1数据表中删除地区
df1 = df.drop(["地区","单价"], axis = 1, inplace = False)
#对df1数据表进行累加运算, 随后添加到df表中.
df["总销量"] = df1.apply(lambda x: x.sum(), axis = 1)
df

#删除地区和单价,分别计算前半年与后半年的三个地区总和.
df2 = df.drop(["地区","单价"], axis = 1, inplace = False)
#利用apply函数计算之后,添加至数据表中
df.loc["Sum"] = df2.apply(lambda x: x.sum(), axis = 0 )
df

13.2 减法运算
同样有两种方式: 一种是采用sub()函数, A.sub(B)表示A-B, 另一种是采用减法运算符 "-"
#函数法: 注意A.sub(B)表示A-B
df["销量增长"] = df["后半年销量"].sub(df["前半年销量"])
#运算符: "-"
df["销量增长"] = df["后半年销量"] - df["前半年销量"]
df
两种方式, 同样的结果:

13.3 乘法运算
同样是两种方式: 一种是采用mul()函数: A.mul(B)表示: A与B之积, 另一种则是乘法运算符 "*"
#函数法: A.mul(B)
df["前半年销售额"] = df["前半年销量"].mul(df["单价"])
#运算符: "*"
df["后半年销售额"] = df["后半年销量"] * df["单价"]
df

13.4 除法运算
同样是两种: 一种是采用div()函数: A.div(B)表示: A除以B, 第二种则是采用除法运算符"/"
#函数法
df["前半年销量1"] = df["前半年销量"].div(100)
#运算符法
df["前半年销量2"] = df["前半年销量"] / 1000
df

13.5 其他运算
13.5.1 取整和取余
#取整符号: "//"
df["后半年销量1"] = df["后半年销量"] // 1000
#取余符号: "%"
df["前半年销量1"] = df["前半年销量"] // 100 % 10
df

13.5.2 聚合运算
采用聚合函数对一组数据进行运算, 并返回单个值, 比如最大值max()函数, 最小值min()函数, 平均值mean()函数
#求前半年销量最大值
df1 = df["前半年销量"].max()
#求后半年销量最小值
df2 = df["后半年销量"].min()
#求单价的平均值
df3 = df["单价"].mean()
df1, df2 ,df3
(4500, 3000, 14.333333333333334)
14. 0-1标准化
0-1标准化是对原始数据进行线性变换, 使其结果映射成[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

15. 数据分组
数据分组是根据统计研究的需求, 对原始数据按照某种标准划分为不同的组别. 主要目的是观察数据的分布特征. 在数据分组后再计算出各组中数据出现的的频数, 最终形成频数分布表.
pandas中数据分组采用的函数是cut(x, bins, right = True, labels = None)函数:
第一个参数x指的是要分组的数据
第二个参数bins指的是划分标准, 也就是定义组的上限与下限
第三个参数right = True表示右边闭合, 左边不闭合; 当right = False时表示右边不闭合, 左边闭合, 默认为True.
第四个参数则是自定义分组的内容
更多cut()函数相关参考官方文档: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.cut.html?highlight=cut#pandas.cut
import pandas as pd
df = 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 pd
df = pd.DataFrame({"地区": ["A区","B区", "C区", "D区", "E区", "F区", "G区"],
"单价": [ 8 , 20, 15, 7, 34, 25, 30]})
bins = [5, 15, 25, 35]
#自定义labels
labels = ["15以下", "15到25", "25以上"]
df["分组"] = pd.cut(df.单价, bins, labels = labels)
df

16. 日期转换
日期转换是指将字符类型转换成日期格式.
16.1 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表示秒
to_datetime()函数官方文档: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_datetime.html?highlight=to_datetime#pandas.to_datetime
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

16.2 datetime.strptime()方法
借助datetime模块中datetime类的strptime()方法, 将字符类型转化为日期格式.
strptime(date_string, format)方法中有两个参数, 第一个参数则是要转化的字符串, 第二个参数则为字符串中日期的格式
import pandas as pd
from datetime import datetime
df = 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

17. 日期格式化
日期格式化就是将日期按照指定的格式输出成字符类型, 这里借助datetime模块中datetime类的strftime()方法实现:
import pandas as pd
from datetime import datetime
df = 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

18.日期抽取
从日期格式中抽取日期的部分内容, 比如抽取年份, 月份等. 语法: 转换为日期格式的列.dt.要抽取的属性.
import pandas as pd
from datetime import datetime
df = 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.year
df["month"] = df["BD"].dt.month
df["day"] = df["BD"].dt.day
df["hour"] = df["BD"].dt.hour
df["minute"] = df["BD"].dt.minute
df["second"] = df["BD"].dt.second
df["weekday"] = df["BD"].dt.weekday
df

以上是本次的学习总结, 后续会持续更新...
Python数据分析--Pandas知识点(二)的更多相关文章
- Python数据分析--Pandas知识点(三)
本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...
- Python数据分析--Pandas知识点(一)
本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘 1. 重复值的处理 利用drop_duplicates()函数删除数据表中重复多余的记录, 比如删除重复多余的ID. im ...
- Python数据分析教程(二):Pandas
Pandas导入 Pandas是Python第三方库,提供高性能易用数据类型和分析工具 Pandas基于NumPy实现,常与NumPy和Matplotlib一同使用 两个数据类型:Series, Da ...
- Python数据分析-Pandas(Series与DataFrame)
Pandas介绍: pandas是一个强大的Python数据分析的工具包,是基于NumPy构建的. Pandas的主要功能: 1)具备对其功能的数据结构DataFrame.Series 2)集成时间序 ...
- Python:pandas(二)——pandas函数
Python:pandas(一) 这一章翻译总结自:pandas官方文档--General functions 空值:pd.NaT.np.nan //判断是否为空 if a is np.nan: .. ...
- python数据分析Numpy(二)
Numpy (Numerical Python) 高性能科学计算和数据分析的基础包: ndarray,多维数组(矩阵),具有矢量运算能力,快速.节省空间: 矩阵运算,无需循环,可以完成类似Matlab ...
- Python数据分析Pandas库之熊猫(10分钟二)
pandas 10分钟教程(二) 重点发法 分组 groupby('列名') groupby(['列名1','列名2',.........]) 分组的步骤 (Splitting) 按照一些规则将数据分 ...
- Python数据分析 Pandas模块 基础数据结构与简介(二)
重点方法 分组:groupby('列名') groupby(['列1'],['列2'........]) 分组步骤: (spiltting)拆分 按照一些规则将数据分为不同的组 (Applying)申 ...
- python 数据分析--pandas
接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利用pandas的DataFrames进行统计分析 ...
随机推荐
- 自己写一个spring boot starter
https://blog.csdn.net/liuchuanhong1/article/details/55057135
- servlet中请求转发(forword)与重定向(sendredirect)
请求转发和重定向 request.setAttribute("test","hello"); request.getRequestDispacther(&quo ...
- Go语言学习笔记(1)
包 package 声明包,import 导入包,导入的包名要用"",包中导出的名字以大写字母打头. package main import "fmt" imp ...
- Nginx使用GZIP来压缩网页
HTTP协议上的GZIP编码是一种用来改进web应 用程序性能的技术.大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度.这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中 ...
- python模块os
一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台 ...
- Delphi动态调用C++写的DLL
c++ DLL 文件,建议用最简单的c++编辑工具.不会加入很多无关的DLL文件.本人用codeblocks+mingw.不像 VS2010,DLL编译成功,调用的时候会提示缺其他DLL. 系统生成的 ...
- gitlab jenkins 自动构建
工作中有这样一种需求: 每次提交代码之后,都自动执行 单元测试脚本,进行单元测试 jenkins监听项目的某个分支,设置运行脚本,设置一个url作为回调 利用gitlab的钩子,在每次有提交之后,触发 ...
- ArcMap导入图层出现General function failure问题 [转]
ArcMap导入图层出现General function failure问题 [转] Link: http://www.cnblogs.com/angelx/p/3391967.html 问题描述 ...
- 吴裕雄 oracle PL/SQL编程
- java的特点
java是一种跨平台.适合于分布式计算机环境的面向对象编程语言.具有以下特性:简单性.面向对象.分布性.解释性.可靠.安全.平台无关.可移植性.高性能.多线程.动态性等特点. 面向过程和面向对象可以用 ...