pythonpandas数据类型(详解Python数据分析--Pandas知识点)
pythonpandas数据类型
详解Python数据分析--Pandas知识点本文主要是总结学习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() |
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 |
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() |
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 |
4. 查看数据类型
查看所有列的数据类型使用dtypes, 查看单列使用dtype, 具体用法如下:
|
import pandas as pd df = pd.dataframe({ "id" : [ 100000 , 100101 , 100201 ], "surname" : [ " zhao " , "qian" , " sun " ]}) #查看所有列的数据类型 df.dtypes #查看单列的数据类型 df[ "id" ].dtype |
5. 修改数据类型
使用astype()函数对数据类型进行修改, 用法如下
|
import pandas as pd df = pd.dataframe({ "id" : [ 100000 , 100101 , 100201 ], "surname" : [ " zhao " , "qian" , " sun " ]}) #将id列的类型转化为字符串的格式 df[ "id" ].astype( str ) |
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 ) |
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 |
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 |
两种方式同样的结果:
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) |
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字段成功:
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 ] |
2) 范围运算: df[df.字段名.between(s1, s2)], 注意既包含s1又包含s2, 比如抽取年龄大于等于23小于等于28的记录.
|
df_mer[df_mer.age.between( 23 , 28 )] |
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 )] |
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)] |
当na改为true时, 结果为:
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)] |
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知识点详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!
原文链接:https://www.cnblogs.com/star-zhao/p/9697360.html- python循环语句嵌套使用(Python分支语句与循环语句应用实例分析)
- python中if的条件语句(浅谈Python的条件判断语句if/else语句)
- python用于机器人(python机器人运动范围问题的解答)
- pythonflask编写接口(Python Flask框架模板操作实例分析)
- elasticsearch数据写入原理(Python对ElasticSearch获取数据及操作)
- python实现linux服务(Python实现Linux监控的方法)
- python字符串匹配教程(Python字符串匹配之6种方法的使用详解)
- python中随机生成不重复随机数(python 在指定范围内随机生成不重复的n个数实例)
- python 提取微信消息(python实现文件助手中查看微信撤回消息)
- python爬网验证码在哪里(详解python 爬取12306验证码)
- python带权限复制文件夹(python定时复制远程文件夹中所有文件)
- python爬虫音乐代码(详解python selenium 爬取网易云音乐歌单名)
- pythontime模块有哪些(Python3.5内置模块之time与datetime模块用法实例分析)
- python微信支付接口(Python提取支付宝和微信支付二维码的示例代码)
- python关于微信的模块(python基于itchat模块实现微信防撤回)
- python 简单算法(python实现爬山算法的思路详解)
- 专访 《紧急公关》折射现实生态 主演黄晓明 理性看待 向往美好(紧急公关折射现实生态)
- 庆余年剧组重聚王牌5,宋轶神秘消失,肖战出现一秒抢了李纯风头(庆余年剧组重聚王牌5)
- 巴厘岛旅游攻略(巴厘岛旅游攻略7天多少钱)
- 文莱旅游攻略(文莱旅游攻略介绍)
- 马来西亚旅游攻略(马来西亚旅游攻略自由行攻略)
- 缅甸旅游攻略(缅甸旅游攻略必去景点推荐)
热门推荐
- docker-compose 原理(详解docker compose 用法)
- 面试怎么谈工资
- pandas数据分组使用方法(在Pandas中DataFrame数据合并,连接concat,merge,join的实例)
- css42个实用技巧(你必须要知道的几个CSS技巧)
- vue实现双向绑定原理(vue实现双向数据绑定)
- C#递归的应用
- tomcat的部署和优化(看看Tomcat安装、配置、优化及负载均衡)
- python的静态方法和类方法(深入解析python中的实例方法、类方法和静态方法)
- ih5如何点击按钮跳转至网页(HTML5跳转小程序wx-open-launch-weapp的示例代码)
- 宝塔面板使用外部数据库(宝塔面板负载状态load average中的数据代表了什么?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9