详解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 07 Python
python读取word文档的方法
May 09 Python
Python实现螺旋矩阵的填充算法示例
Dec 28 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
python中partial()基础用法说明
Dec 30 Python
树莓派极简安装OpenCv的方法步骤
Oct 10 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
Python os模块常用方法和属性总结
Feb 20 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
Mar 30 Python
Python reduce函数作用及实例解析
May 08 Python
python 日志模块 日志等级设置失效的解决方案
May 26 Python
python 如何调用 dubbo 接口
Sep 24 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
PHP制作图型计数器的例子
2006/10/09 PHP
PHP获取url的函数代码
2011/08/02 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
Yii框架中jquery表单验证插件用法示例
2016/10/18 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
js 页面元素的几个用法总结
2013/11/18 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
js如何获取图片url的Blob值并预览示例代码
2019/03/07 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
Vue基础配置讲解
2019/11/29 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
详解ES6中class的实现原理
2020/10/03 Javascript
基于javascript实现放大镜特效
2020/12/03 Javascript
Python学习笔记之lambda表达式用法详解
2019/08/08 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
Django celery异步任务实现代码示例
2020/11/26 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
幼儿园教师个人反思
2014/01/30 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
闪闪红星观后感
2015/06/08 职场文书
2015中学学校工作总结
2015/07/20 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python