醒醒,别睡了...讲《数据分析pandas库》了—/—<7>

一、

1、处理缺失值

1.1 认识缺失值
        系统默认的缺失值 None np. nan
data=pd.Series([3,4,np.nan,1,5,None])
df=pd.DataFrame([[1,2,None],[4,np.nan,6],[5,6,7]])

         

1.2 缺失值查看
        直接调用info() 方法就会返回每一列的缺失情况。
df=pd.DataFrame([[1,2,np.nan],[4,np.nan,6],[5,6,7]])
df.info()
         
        Pandas中缺失值用NaN 表示,从用 info() 方法的结果来看,索引 1 这一列是1 2 non-null float64 ,表示这一列有 2 个非空值,而应该是 3个非空值,说明这一列有 1 个空值。还可以用isnull() 方法来判断哪个值是缺失值,如果是缺失值则返回True,如果不是缺失值返回 False

1.3 获取所有缺失值

      df.isna(): 检查相应的数据是否为缺失值 同 df.isnull()

      df.notna()等同于notnull()

data=pd.Series([3,4,np.nan,1,5,None])
print('isnull()方法判断是否是缺值:')
print(data.isnull())
print(data.isna())
print('获取缺值:')
print(data[data.isnull()])
print('获取非空值')
print(data[data.notnull()])

1.4 检查多个单元格的取值是否为指定缺值
1.4.1 any() 
df.any(axis : index (0), columns (1)skipna = True :检查时是否忽略缺失值level = None :多重索引时指定具体的级别
)
1.4.2 all()
df.all(axis : index (0), columns (1)skipna = True :检查时是否忽略缺失值level = None :多重索引时指定具体的级别
)

实例如下:

df=pd.DataFrame([[1,2,np.nan],[4,np.nan,6],[5,6,7]])
df.info()
#默认检测的是列值
df.isna().any()
#检测行值
df.isna().any(1)
df[df.isna().any(1)]

1.5 填充缺失值

        调用fillna()方法对数据表中的所有缺失值进行填充,在fillna()方法 中输入要填充的值。还可以通过method参数使用前一个数和后一个数来进行填充。

其用法如下:

df.fillna(value :用于填充缺失值的数值,也可以提供dict/Series/DataFrame 以进—步指明哪些索引/列会被替换 不能使用 listmethod = None :有索引时具体的填充方法,向前填充,向后填充等limit = None :指定了 method 后设定具体的最大填充步长,此步长不能填充axis : index (0), columns (1)inplace = False
)
1.5.1 :Series对象缺失值填充(ffill、bfill)
data=pd.Series([3,4,np.nan,1,5,None])
print('以0进行填充:')
print(data.fillna(0))
print('以前一个数进行填充:')
print(data.fillna(method='ffill'))
print('以后一个数进行填充:')
print(data.fillna(method='bfill'))
print('先按前一个,再按后一个')
print(data.fillna(method='bfill').fillna(method='ffill'))
1.5.2 :DataFrame对象缺失值填充(ffill、bfill)
df=pd.DataFrame([[1,2,np.nan],[4,np.nan,6],[5,6,7]])
print('使用数值0来填充:')
print(df.fillna(0))
print('使用行的前一个数来填充:')
print(df.fillna(method='ffill'))
print('使用列的后一个数来填充:')
print(df.fillna(method='bfill' ,axis=1))
1.5.3 :列的平均值来填充
df=pd.DataFrame([[1,2,np.nan],[4,np.nan,6],[5,6,7]])
for i in df.columns:df[i]=df[i].fillna(np.nanmean(df[i]))
print(df)

1.6 删除缺失值

        调用dropna()方法删除缺失值,dropna()方法默认删除含有缺失值 的行,也就是只要某一行有缺失值就把这一行删除。如果想按列为单位删除缺失值,需要传入参数axis=’columns’

df.dropna(axis = 0 : index (0), columns (1)how = any : any、allany :任何一个为 NA 就删除all :所有的都是 NA 删除thresh = None :删除的数量阈值,intsubset :希望在处理中包括的行/列子集inplace = False :
)

 

1.6.1  删除缺失值
df=pd.DataFrame([[1,2,np.nan],[4,np.nan,6],[5,6,7]])
print('默认为以行为单位剔除:')
print(df.dropna())#剔除整行
print('以列为单位剔除:')
df.dropna(axis='columns')#剔除整列

1.6.2 删除空白行
df=pd.DataFrame([[1,2,np.nan],[4,np.nan,6],[5,6,7]])
print('所有为nan时候才剔除:')
print(df.dropna(how='all'))
print('默认情况,只要有就剔除')
print(df.dropna(how='any'))

1.7 数据查重

1.7.1 标识出重复的行Duplicated

        标识出重复行的意义在于进一步检査重复原因,以便将可能的错误数据加以修改

df['dup' ] = df.duplicated( ['课程','开设'])
1.7.2 利用索引进行重复行标识
df.index.duplicated()
df2 = df.set_index ( ['课程','开设'] )#将DataFrame的索引设置为多个列,即['课程', '开设']。通过设置index参数为这两个列名称,可以将这两列作为DataFrame的新索引
df2.index.duplicated ()#检查新索引中是否存在重复的行。返回的是一个布尔型的Series,其中True表示索引是重复的,False表示索引是唯一的。

1.7.3 直接删除重复的行

drop_duplicates (subset=""按照指定的行逬行去重keep='first' 、 'last' 、 False 是否直接删除有重复的所有记录
)
df. drop_duplicates ( ['课程', '开设' ] )
df. drop_duplicates ( ['课程', '开设' ] , keep= False )

1.7.4 利用査重标识结果直接删除
df[~df.duplicated( )]
 df[~df . duplicated ( ['课程', '开设' ] )]

2、日期时间变量

2.1 Timestamp

        在pandas中,Timestamp是一个用于表示时间戳的数据类型。它是pandas提供的一种高效、灵活的时间数据类型。

        Timestamp可以用于存储和操作精确到纳秒级别的时间数据。它可以表示特定的日期和时间,包括年、月、日、小时、分钟、秒等信息。并且可以进行各种时间相关的操作,如日期和时间的比较、排序、索引、切片、聚合等。它还支持将时间戳对象与其他时间数据类型进行转换,并提供了许多方便的时间函数和属性,如获取年份、月份、星期几、季度等。

from datetime import datetime
pd.Timestamp(datetime(2032,1,1))
pd.Timestamp(datetime(2032,1,2,3,4,5))
pd.Timestamp(2032,1,2)
pd.Timestamp('2032-01-02 3:4:5')
  • 第二行代码创建了一个时间戳对象,表示2032年1月1日。
  • 第三行代码创建了另一个时间戳对象,表示2032年1月2日3点4分5秒。
  • 第四行代码创建了一个时间戳对象,表示2032年1月2日。
  • 第五行代码通过字符串传递给Timestamp函数,创建了一个时间戳对象,表示2032年1月2日3点4分5秒。
2.2 Peroid

        Peroid是一个用于表示时间段(时间区间)

        Peroid表示一个连续的时间段,例如一个月、一个季度、一年等。它具有固定的开始和结束时间,并且可以通过指定频率来表示不同的时间间隔,如天、周、月、季度、年等。

        Peroid对象有两个主要属性,即start_timeend_time,用于表示时间段的起始时间和结束时间。它还提供了一些方便的方法来处理时间段,如获取时间段的长度、比较不同时间段的顺序关系等。

        Peroid可以与其他时间对象(如Timestamp、DatetimeIndex等)进行操作和转换,并广泛应用于时间序列数据的处理、分析和可视化中。

pd.Period('2032-01')
pd.Period('2032-01',freq='D')#精确到日

2.3 数据转换
2.3.1 使用 pd.Timestamp()直接转换
pd.Timestamp(df['date'][0])
df['date'].apply(pd.Timestamp)

   pd.Timestamp(df['date'][0])的代码将DataFrame中date列的第一个元素转换为Timestamp类型的数据。

   df['date'].apply(pd.Timestamp)的代码将DataFrame中date列中的所有元素逐个应用

2.3.2  to_datetime 进同比量转换
pd.to_datetime(arg :需要转换为 Timestamp 类的数值Integer, float, string, datetime, list, tuple, 1-d array,Series,errors = ‘raise' : (‘ ignore' , ‘raise' , 'coerce' )'raise ' 抛出错误'coerce' 设定为 NaT'ignore' 返回原值短日期的解释方式:类似 '10/11/12"这样的数据如何解释dayfirst = ‘False' : 数值是否 day 在前yearfirst = 'False':数值是否 year 在前,该设定优先box = True :是否返回为 DatetimeIndex, False 时返回ndarray 数组format = None :需要转换的字符串格式设定)
pd.to_datetime(datetime(2032, 1, 2, 3, 4, 5))
pd.to_datetime('2032-01-02 3:4:5')
pd.to_datetime(['2032/01/02' , '2032.01.03'])
pd.to_datetime(df[ 'date' ], format = '%Y-%m-%d %H:%M')

   pd.to_datetime(datetime(2032, 1, 2, 3, 4, 5))的代码将传入的datetime对象转换为Timestamp类型的数据。

   pd.to_datetime('2032-01-02 3:4:5')的代码将传入的字符串日期时间转换为Timestamp类型的数据。

   pd.to_datetime(['2032/01/02', '2032.01.03'])的代码将传入的日期字符串列表转换为DatetimeIndex类型的数据。

   pd.to_datetime(df['date'], format='%Y-%m-%d %H:%M')的代码将DataFrame中的date列中的日期时间字符串按照指定的格式进行解析,并将其转换为DatetimeIndex类型的数据。

2.3.4 基于所需的变量列合成 Timestamp
pd.to_datetime(df[['Year' , 'Month' , 'Day' ,'Hour']])

   即将DataFrame中的YearMonthDayHour列的值转换为datetime类型的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Linux中,MySQL备份与恢复

随着自动化办公与电子商务的不断发展,企业对于信息系统的依赖性越来越高,而数据库在信息系统中担任着非常重要的角色。尤其一些对数据可靠性要求非常高的行业,如银行、证券、电信等,如果发生意外宕机或数据丢失,其损失是非常严重的…

[ACTF2020 新生赛]Upload1

打开靶机,发现什么都没有 查看源码发现有个表单,不过高度为0,所以被隐藏了,我们直接找打css文件,清空(也可以设置原始高度) 然后提交木马脚本,直接提交PHP不通过 修改为phtml&#x…

Java | Leetcode Java题解之第299题猜数字游戏

题目&#xff1a; 题解&#xff1a; class Solution {public String getHint(String secret, String guess) {int bulls 0;int[] cntS new int[10];int[] cntG new int[10];for (int i 0; i < secret.length(); i) {if (secret.charAt(i) guess.charAt(i)) {bulls;} e…

初学Mybatis之多对一查询 association 和一对多查询 collection

XML 映射器 多对一&#xff1a;关联&#xff08;association&#xff09; 一对多&#xff1a;集合&#xff08;collection&#xff09; mysql 创建教师、学生表&#xff0c;插入数据 create table teacher(id int(10) primary key,name varchar(30) default null ) engineI…

OpenSource - Ip2region 离线IP地址定位库和IP定位数据管理框架

文章目录 Ip2region 是什么Ip2region 特性1、IP 数据管理框架2、数据去重和压缩3、极速查询响应 xdb 数据查询xdb 数据生成xdb 数据更新手动编辑更新检测自动更新 相关备注1、并发查询必读2、技术资源分享 Release Ip2region 是什么 https://github.com/lionsoul2014/ip2regio…

【C++】使用哈希表封装unordered_map与unordered_set

文章目录 1. unordered系列关联式容器1.1 unordered_set1.2 unordered_map 2. unordered_set/map的封装2.1 基本接口2.2 迭代器2.2.1 迭代器的结构2.2.2 set迭代器的封装2.2.3 map迭代器的封装 3.完整代码3.1HashTable3.2unordered_set3.3unordered_map 1. unordered系列关联式…

Windows Redis启动方式及保持服务运行方法

1. Redis启动方法 1. cmd进入redis文件夹下&#xff0c;输入&#xff1a;redis-server.exe redis.windows.conf&#xff0c;出现如下界面启动成功。但此cmd窗口要一直保持打开状态&#xff0c;一旦关闭redis也就关闭了。要想cmd关闭&#xff0c;但redis处于打开状态&#xff…

医疗器械上市欧美,需要什么样的网络安全相关申报文件?

医疗器械在欧美上市时&#xff0c;需要提交的网络安全相关申报文件主要包括以下几个方面&#xff0c;这些要求基于欧美地区的法律法规和监管机构的指导文件。 一、美国FDA要求 1. 网络安全管理计划 内容&#xff1a;制造商需要提交一份网络安全管理计划&#xff0c;该计划应包含…

【人工智能】人工智能概论(一):人工智能基本概概念、学派、发展历程与新一代人工智能

文章目录 1. 人工智能的基本概念与定义2. 人工智能的主要学派及主旨思想2.1. 符号主义学派&#xff1a;AI源自数学逻辑2.2. 连接主义学派&#xff1a;AI源自仿生学2.3. 行为主义学派&#xff1a;AI源自控制论 3. 人工智能的起源及发展历程4. 驱动新一代人工智能快速发展的因素 …

【C语言】C语言期末突击/考研--导学篇

前言 我将把C语言的知识要点&#xff0c;学习收获以文章形式发表&#xff0c;由于我目前也还是一个菜鸟&#xff0c;难以避免错误和存在观点片面的部分&#xff0c;非常感谢读者指正&#xff01;希望能在这里与大家共同进步&#xff0c;早日成为大牛&#xff01;进入大厂&…

本地使用Git同步、配合Gitee同步至仓库并下拉到本地(亲手调试,全能跑通)

这几天在公司&#xff0c;同事都在使用Gitee上传项目&#xff0c;进行同步&#xff0c;我也进行了简单学习了解了一下版本控制软件Git&#xff0c;挺不错的&#xff0c;故写个笔记记录一下。 本篇博文主要涉及的内容&#xff1a; 1&#xff0c;本地写代码&#xff0c;通过Git同…

初阶数据结构1 算法复杂度

1.数据结构概念 数据结构(Data Structure)是计算机存储、组织数据的⽅式&#xff0c;指相互之间存在⼀种或多种特定关系的数 据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤&#xff0c;所以我们要学各式各样的数据结构&#xff0c; 如&#xff1a;线性表、树、图、哈…

【C++】—— 类和对象(一)

【C】—— 类和对象&#xff08;一&#xff09; 1、类的定义1.1、类定义1.1.1、类定义格式1.1.2、成员变量的标识1.1.3、C 中的 s t r u c t struct struct1.1.4、C 中的内联函数1.1.5、总结 1.2、访问限定符1.3、类域 2、实例化2.1、实例化的概念2.2、对象大小2.2.1、对象的大…

lenovo联想ThinkBook 14 G4+ IAP/ARA(21CX,21D0)笔记本原装出厂Windows11系统预装OEM镜像下载

ThinkBook 14 G4 IAP【21CX】原厂系统Win11恢复安装包&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1iY9BxidIbv4RnXKaqbydTA?pwd9wc6 提取码&#xff1a;9wc6 ThinkBook 14 G4 ARA【21D0】原厂系统Win11恢复安装包&#xff1a; 链接&#xff1a;https://pan.ba…

nest学习笔记(一)

介绍 nest是一个用于构建高效&#xff0c;可拓展的nodejs服务端应用程序的框架&#xff0c;它使用渐进式javascript&#xff0c;使用Typescript构建并且完全支持Typescript&#xff0c;而且运行开发者使用javascript编写代码&#xff0c;提供了OOP、FP、FRP nest的底层是基于…

Linux编程:使用python或者shell获取系统信息

0. 概要 在日常的系统管理和性能监控中&#xff0c;获取系统信息是一个非常常见的需求。 本文将介绍如何使用Python和Shell脚本来获取这些系统信息。 1. 使用Python获取系统信息 使用psutil库来获取系统的CPU、内存、磁盘和网络信息。 1.1 安装psutil库 首先&#xff0c;我…

盗梦空间续集(InceptionNeXt):使用Inception优化加速ConvNeXt实现ImageNet-1K的最佳精度

Abstract 灵感来自ViT的长距离建模能力&#xff0c;大核卷积最近被广泛研究和采用&#xff0c;以扩大感受野并提高模型性能&#xff0c;例如显著的工作ConvNeXt采用77深度卷积。虽然这种深度算子只消耗少量的FLOPs&#xff0c;但由于高内存访问成本&#xff0c;它在强大计算设…

java实战项目--拼图小游戏(附带全套源代码)

个人主页VON 所属专栏java实战项目游戏参考黑马程序员 一、效果展示 二、功能介绍 游戏中所有的图片以及代码均已打包&#xff0c;玩家直接安装游戏即可&#xff0c;不用idea也可以畅玩。 游戏功能比较单一&#xff0c;只有简单的拼图功能。 a&#xff1a;展示原图重新游戏&a…

《汇编语言 基于x86处理器》- 读书笔记 - 第3章-汇编语言基础

《汇编语言 基于x86处理器》- 读书笔记 - 第3章-汇编语言基础 3.1 基本语言元素3.1.1 第一个汇编语言程序常见汇编语言调用规范 3.1.2 整数常量&#xff08;基数、字面量&#xff09;3.1.3 整型常量表达式3.1.4 实数常量十进制实数十六进制实数&#xff08;编码实数&#xff09…

USB 2.0 协议专栏之 USB 2.0 概述(一)

前言&#xff1a;本篇博客为手把手教学的 USB 2.0 协议栈类精品博客&#xff0c;该专栏博客侧重针对 USB 2.0 协议进行讲解。Universal Serial Bus 作为如今最常见的通信接口&#xff0c;被广泛应用于&#xff1a;Keyboard、Mouse、Communication Device Class 和 Mass Storage…