详解Python数据分析--Pandas知识点


Posted in Python onMarch 23, 2019

本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘

1. 重复值的处理

利用drop_duplicates()函数删除数据表中重复多余的记录, 比如删除重复多余的ID.

import pandas as pd
 df = pd.DataFrame({"ID": ["A1000","A1001","A1002", "A1002"],
         "departmentId": [60001,60001, 60001, 60001]})
 df.drop_duplicates()

详解Python数据分析--Pandas知识点

2. 缺失值的处理

缺失值是数据中因缺少信息而造成的数据聚类, 分组, 截断等

2.1 缺失值产生的原因

主要原因可以分为两种: 人为原因和机械原因.

1) 人为原因: 由于人的主观失误造成数据的缺失, 比如数据录入人员的疏漏;

2) 机械原因: 由于机械故障导致的数据收集或者数据保存失败从而造成数据的缺失.

2.2 缺失值的处理方式

缺失值的处理方式通常有三种: 补齐缺失值, 删除缺失值, 删除缺失值, 保留缺失值.

1) 补齐缺失值: 使用计算出来的值去填充缺失值, 例如样本平均值.

使用fillna()函数对缺失值进行填充, 使用mean()函数计算样本平均值.

import pandas as pd
import numpy as np
df = pd.DataFrame({'ID':['A10001', 'A10002', 'A10003', 'A10004'], 
          "Salary":[11560, np.NaN, 12988,12080]})
#用Salary字段的样本均值填充缺失值
df["Salary"] = df["Salary"].fillna(df["Salary"].mean())
df

详解Python数据分析--Pandas知识点

2) 删除缺失值: 当数据量大时且缺失值占比较小可选用删除缺失值的记录.

示例: 删除entrytime中缺失的值,采用dropna函数对缺失值进行删除:

import pandas as pd
df = pd.DataFrame({"ID": ["A1000","A1001","A1002"],
         "entrytime": ["2015-05-06",pd.NaT,"2016-07-01" ]})
df.dropna()

详解Python数据分析--Pandas知识点

3) 保留缺失值.

3. 删除前后空格

使用strip()函数删除前后空格.

import pandas as pd
 df = pd.DataFrame({"ID": ["A1000","A1001","A1002"],
         "Surname": [" Zhao ","Qian"," Sun " ]})
 df["Surname"] = df["Surname"].str.strip()
 df

详解Python数据分析--Pandas知识点

4. 查看数据类型

查看所有列的数据类型使用dtypes, 查看单列使用dtype, 具体用法如下:

import pandas as pd
df = pd.DataFrame({"ID": [100000,100101,100201],"Surname": [" Zhao ","Qian"," Sun " ]})
#查看所有列的数据类型
df.dtypes
#查看单列的数据类型
df["ID"].dtype

详解Python数据分析--Pandas知识点

5. 修改数据类型

使用astype()函数对数据类型进行修改, 用法如下

import pandas as pd
df = pd.DataFrame({"ID": [100000,100101,100201],"Surname": [" Zhao ","Qian"," Sun " ]})
#将ID列的类型转化为字符串的格式
df["ID"].astype(str)

详解Python数据分析--Pandas知识点

6. 字段的抽取

使用slice(start, end)函数可完成字段的抽取, 注意start是从0开始且不包含end. 比如抽取前两位slice(0, 2).

import pandas as pd
df = pd.DataFrame({"ID": [100000,100101,100201],"Surname": [" Zhao ","Qian"," Sun " ]})
#需要将ID列的类型转换为字符串, 否则无法使用slice()函数
 df["ID"]= df["ID"].astype(str)
#抽取ID前两位
df["ID"].str.slice(0,2)

详解Python数据分析--Pandas知识点

7. 字段的拆分

使用split()函数进行字段的拆分, split(pat=None, n = -1, expand=True)函数包含三个参数:

第一个参数则是分隔的字符串, 默认是以空格分隔

第二个参数则是分隔符使用的次数, 默认分隔所有

第三个参数若是True, 则在不同的列展开, 否则以序列的形式显示.

import pandas as pd
df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28" ]})
#对Surname_Age字段进行拆分
df_new = df["Surname_Age"].str.split("_", expand =True)
df_new

详解Python数据分析--Pandas知识点

8. 字段的命名

有两种方式一种是使用rename()函数, 另一种是直接设置columns参数

import pandas as pd
df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28" ]})
#第一种方法使用rename()函数
# df_new = df["Surname_Age"].str.split("_", expand =True).rename(columns={0: "Surname", 1: "Age"})
# df_new
#第二种方法直接设置columns参数
df_new = df["Surname_Age"].str.split("_", expand =True)
df_new.columns = ["Surname","Age"]
df_new

两种方式同样的结果:

详解Python数据分析--Pandas知识点

9. 字段的合并

使用merge()函数对字段进行合并操作.

import pandas as pd
 df = 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"]
 #使用merge函数对两表的字段进行合并操作.
pd.merge(df, df_new, left_index =True, right_index=True)

详解Python数据分析--Pandas知识点

10. 字段的删除

利用drop()函数对字段进行删除.

import pandas as pd
df = 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)
#drop()删除字段,第一个参数指要删除的字段,axis=1表示字段所在列,inplace为True表示在当前表执行删除.
df_mer.drop("Surname_Age", axis = 1, inplace =True)
df_mer

删除Surname_Age字段成功:

详解Python数据分析--Pandas知识点

11. 记录的抽取

1) 关系运算: df[df.字段名 关系运算符 数值], 比如抽取年龄大于30岁的记录.

import pandas as pd
df = 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]

详解Python数据分析--Pandas知识点

2) 范围运算: df[df.字段名.between(s1, s2)], 注意既包含s1又包含s2, 比如抽取年龄大于等于23小于等于28的记录.

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

详解Python数据分析--Pandas知识点

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)]

详解Python数据分析--Pandas知识点

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)]

详解Python数据分析--Pandas知识点

当na改为True时, 结果为:

详解Python数据分析--Pandas知识点

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)]

详解Python数据分析--Pandas知识点

12.记录的合并

使用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])

详解Python数据分析--Pandas知识点

以上是部分内容, 还会持续总结更新....

以上所述是小编给大家介绍的Python数据分析--Pandas知识点详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
实例解析Python中的__new__特殊方法
Jun 02 Python
深入理解Python分布式爬虫原理
Nov 23 Python
python使用itchat实现手机控制电脑
Feb 22 Python
python 统计数组中元素出现次数并进行排序的实例
Jul 02 Python
selenium+python环境配置教程详解
May 28 Python
python twilio模块实现发送手机短信功能
Aug 02 Python
基于Tensorflow:CPU性能分析
Feb 10 Python
利用 Python ElementTree 生成 xml的实例
Mar 06 Python
浅析Python 字符编码与文件处理
Sep 24 Python
基于Django集成CAS实现流程详解
Nov 28 Python
基于Django快速集成Echarts代码示例
Dec 01 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 Python
详解Python基础random模块随机数的生成
Mar 23 #Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
Mar 23 #Python
Django异步任务之Celery的基本使用
Mar 23 #Python
深入解析Python小白学习【操作列表】
Mar 23 #Python
Python基础之条件控制操作示例【if语句】
Mar 23 #Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 #Python
详解python中sort排序使用
Mar 23 #Python
You might like
JavaScript 私有成员分析
2009/01/13 Javascript
js的写法基础分析
2011/01/17 Javascript
js判断一个元素是否为另一个元素的子元素的代码
2012/03/21 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
jQuery获取radio选中项的值实例
2016/06/18 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
JS库之Highlight.js的用法详解
2017/09/13 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
[02:22]2018DOTA2亚洲邀请赛VG赛前采访
2018/04/03 DOTA
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
python Django批量导入不重复数据
2016/03/25 Python
python list排序的两种方法及实例讲解
2017/03/20 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
python爬虫 正则表达式解析
2019/09/28 Python
python pycharm的安装及其使用
2019/10/11 Python
Python内置函数property()如何使用
2020/09/01 Python
家长对老师的感言
2014/03/11 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
工会工作先进事迹
2014/08/18 职场文书
防灾减灾标语
2014/10/07 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
Python3使用Qt5来实现简易的五子棋小游戏
2022/05/02 Python