详解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实现的数据结构与算法之链表详解
Apr 22 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
Oct 18 Python
Python中的字符串替换操作示例
Jun 27 Python
Python基于PyGraphics包实现图片截取功能的方法
Dec 21 Python
在scrapy中使用phantomJS实现异步爬取的方法
Dec 17 Python
python利用小波分析进行特征提取的实例
Jan 09 Python
解决Python设置函数调用超时,进程卡住的问题
Aug 08 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 Python
Python基于Socket实现简易多人聊天室的示例代码
Nov 29 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
Feb 26 Python
python中sys模块的介绍与实例
Apr 17 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
Zerg基本策略
2020/03/14 星际争霸
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
php实现图片按比例截取的方法
2017/02/06 PHP
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
2016/01/14 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
Echarts之悬浮框中的数据排序问题
2018/11/08 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
Python中apply函数的用法实例教程
2014/07/31 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
pytorch标签转onehot形式实例
2020/01/02 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
Python 读取位于包中的数据文件
2020/08/07 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
网络工程专业毕业生推荐信
2013/10/28 职场文书
项目经理聘任书
2014/03/29 职场文书
遗嘱继承公证书
2014/04/09 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
导游词之日本富士山
2020/01/06 职场文书
Mysql 设置boolean类型的操作
2021/06/04 MySQL
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android