详解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实现爬虫下载漫画示例
Feb 16 Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 Python
TensorFlow 合并/连接数组的方法
Jul 27 Python
Python----数据预处理代码实例
Mar 20 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
Python字典中的值为列表或字典的构造实例
Dec 16 Python
Pytest参数化parametrize使用代码实例
Feb 22 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
django filter过滤器实现显示某个类型指定字段不同值方式
Jul 16 Python
Django nginx配置实现过程详解
Sep 10 Python
python脚本框架webpy模板控制结构
Nov 20 Python
5道关于python基础 while循环练习题
Nov 27 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
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
认识并使用PHP超级全局变量
2010/01/26 PHP
php下Memcached入门实例解析
2015/01/05 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
限制文本框输入N个字符的js代码
2010/05/13 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
node.js中的fs.existsSync方法使用说明
2014/12/17 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
2017/07/14 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
2018/10/24 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
2020/02/24 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
Python输入二维数组方法
2018/04/13 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
Python pandas用法最全整理
2019/08/04 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
初中教师个人总结
2015/02/10 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
pycharm安装深度学习pytorch的d2l包失败问题解决
2022/03/25 Python