Python --Pandas库基础方法(2)

文章目录

    • Pandas
  • 变量类型的转换
    • 查看各列数据类型
    • 改变数据类型
  • 重置索引
  • 删除行
  • 索引和切片
    • series
    • DataFrame
      • 取列
      • 按行列索引选择
      • loc与iloc获取
  • isin()选择
  • query()的使用
  • 排序
    • 用索引排序
    • 使用变量值排序
  • 修改替换变量值
    • 对应数值的替换
  • 数据分组
    • 基于拆分进行筛选
  • 分组汇总
    • 引用自定义函数
  • 处理缺失值
    • 认识缺失值
    • 缺失值查看
    • 获取所有缺失值
    • 填充缺失值
  • 数据查重
    • 标识出重复的行
    • 直接删除重复的行
  • 总结

Pandas

Pandas 是 Python 中一个非常强大的数据处理库,它提供了快速、灵活和表达式丰富的数据结构,旨在使“关系”或“标签”数据的处理工作变得既简单又直观。Pandas 非常适合于数据清洗和准备阶段,以便进行进一步的分析和建模。

这篇我们接着来介绍Pandas方法:

变量类型的转换

Pandas支持的数据类型:

float、int、string、bool、datetime64[nsr]、datetime64[nsr,tz]、timedelta[ns]、category以及object。

查看各列数据类型

#查看各列数据类型book_df.dtypes
----------------------
ID         int64
name      object
age        int64
gender    object
clazz     object
dtype: 	  object

改变数据类型

格式:

df.astype(dtype :指定希望转换的数据类型,可以使用 numpy 或者 python 中的数据类型: int/float/bool/strcopy = True :是否生成新的副本,而不是替换原数据框errors = 'raise' : 转换出错时是否抛出错误,raise/ ignore )
# 改变数据类型book_df['age'].astype("float")
----------------------------------
0      22.0
1      24.0
2      22.0
3      24.0
4      22.0... 
995    24.0
996    21.0
997    22.0
998    23.0
999    23.0
Name: age, Length: 1000, dtype: float64

重置索引

#重置索引--------->reset_indexa_pd = pd.DataFrame(np.random.randint(0,10,(3,2)),columns=list('ab'),index=list('efg'))
a_pd.reset_index(drop=True)	#索引从0开始重置
--------------a	b
0	2	3
1	4	0
2	1	9

删除行

# 删除行new_a_pd.drop(1,inplace=True)	#删除第一行
new_a_pd
---------------a	b
0	5	3
2	6	0

索引和切片

series

索引:

data=pd.Series([4,3,25,2,3],index=list('abcde'))
data
--------
a     4
b     3
c    25
d     2
e     3
dtype: int64
=============================
data['a'] #根据key获取
-------------------
4
==========================
data[1] #索引获取
--------------
3
===========================
data[-1]
----------------
3

切片:

#切片
data['a':'d']
---------------
a     4
b     3
c    25
d     2
dtype: int64
=============================
data[2:4] #索引切片
---------------------
c    25
d     2
dtype: int64
===========================
data[-3:-1]
----------------------
c    25
d     2
dtype: int64
=============================
data[data>3]   #获取满足条件的所有行
--------------------
a     4
c    25
dtype: int64

如果索引与行名相同都是1,这时候就不知道是按照哪个来获取,所以获取时候使用loc、iloc:

loc函数:通过行索引 “Index” 中的具体值来取行数据及根据普通索引获取。

iloc函数:通过行号来取行数据,及根据位置索引获取。

data=pd.Series([5,3,2,5,9],index=[1,2,3,4,5])data.loc[1]		#输入名称
----------------
5
====================
data.iloc[1]	#输入位置
-------------
3

DataFrame

取列

当想要获取 df 中某列数据时,只需要在 df 后面的方括号中指明要选择的列即可。如果是一列,则只需要传入一个列名;如果是同时选择多列,则传入多个列名即可(注意:多个列名 用一个 list 存放)。

#获取一列
df[col]
#获取多列
df[[col1 , col2]]  #输入列名

除了传入具体的列名,我们可以传入具体列的位置,即第几行,对数据进行选取,通过传入位置来获取数据时需要用到 iloc 方法。

df.iloc[行位置,[0,2]]

按行列索引选择

DataFrame对象按照行列检索获取,可以使用loc和iloc函数,方括号中逗号之前的部分表示要获取的行的索引,如果输入一个冒号,或不输入任何数值表示获取所有的行或列,逗号之后方括号表示要获取的列的索引。

1 df.loc[普通行索引,普通列索引]
2 df.iloc[位置行索引,位置列索引]

loc与iloc获取

import numpy as np
import pandas as pddata=pd.DataFrame(np.arange(12).reshape(3,4),
index=list('abc'),columns=list('ABCD'))#获取行为'b'的行
data.loc['b']#使用iloc获取,行为'b'的行,行号为1
data.iloc[1]

isin()选择

df.isin(values) 返回结果为相应的位置是否匹配给出的 values

values 为序列:对应每个具体值

values 为字典:对应各个变量名称

values 为数据框:同时对应数值和变量名称

1 df.col.isin([1,3,5])
2 df[ df.col.isin([1,3,5])]
3 df[ df.col.isin(['val1','val2'])]
4 df[ df.index.isin(['val1','val2'])]

query()的使用

使用boolean值表达式进行筛选

df.query(

expr:语句表达式

inplace=False;是否直接替换原数据框

)

可以使用前缀“@”引用环境变量,等号为==,而不是=。

df.query("col>10 and col<90 and col1=val")
======================
limit = 5
df.query("col<=@limit & col==val")
df.query("col<=@limit & col!=val")

排序

用索引排序

df.sort_index(

level :(多重索引时)指定用于排序的级别顺序号/名称18

ascending = True :是否为升序排列,多列时以表形式提供

inplace = False :

na_position = 'last‘ :缺失值的排列顺序 ( first/last)

df = pd.read_excel("stu_data.xlsx",index_col=["学号”,”性别”]) df.set_index( ['学号','性别'], inplace = True )# 通过索引进行排序                                      
df.sort_index()                              
df.sort_index(ascending=False)
df.sort_index(ascending = [True,False])#设置哪个索引进行排序                          
df.sort_index(level="支出")
df.sort_index(level= ["支出","体重"])

使用变量值排序

df.sort_values(

by :指定用于排序的变量名,多列时以列表形式提供

ascending = True :是否为升序排列

inplace = False :

na_position = 'last‘ :缺失值的排列顺序,( first/last)

# 根据值进行排序
df.sort_values(by='身高')

修改替换变量值

本质上是如何直接指定单元格的问题,只要能准确定位单元地址,就能够做到准确替换。

# 判断哪一行是我们要的数据
df.体重[1] = 78
df['体重'][1] = 68
df.loc[1,'体重'] = 78
df.开设.isin(['不清楚'])
df.开设[df.开设.isin(['不清楚'])] = '可以'

对应数值的替换

df.replace(

to_replace = None :将被替换的原数值,所有严格匹配的数值将被用 value 替换,可以

str/regex/list/dict/Series/numeric/None

value = None :希望填充的新数值

inplace = False

)

df.开设.replace('可以','不清楚',inplace = True)df.性别.replace(['女','男'],[0,1],inplace =True)df.性别.replace({0:'女',1:'男'},inplace =True)

数据分组

df.groupby(

by :用于分组的变量名/函数

level = None :相应的轴存在多重索引时,指定用于分组的级别

as_index = True :在结果中将组标签作为索引

sort = True :结果是否按照分组关键字逬行排序

)#生成的是分组索引标记,而不是新的 df

dfg = df.groupby ('开设')#查看dfg里面的数据
dfg.groups#查看具体描述
dfg.describe( )#按多列分组
dfg2 = df.groupby(['性别','开设'])dfg2.mean ()

基于拆分进行筛选

筛选出其中一组

dfgroup.get_group()

dfg.get_group ('不必要').mean ()
dfg.get_group ('不必要').std ()

筛选出所需的列

该操作也适用于希望对不同的变量列进行不同操作时

dfg['身高'].max()

分组汇总

在使用 groupby 完成数据分组后,就可以按照需求进行分组信息汇总,此时可以使用其它专门的汇总命令,如 agg 来完成汇总操作。

使用 agg 函数进行汇总

df.aggregate( )

名称可以直接简写为 agg,可以用 axis 指定汇总维度,可以直接使用的汇总函数。
在这里插入图片描述

dfg.agg( 'count')dfg.agg('median')dfg.agg(['mean', 'median'])dfg.agg(['mean', 'median'])#引用非内置函数
import numpy as np
df2.身高.agg (np. sum)dfg.身高.agg (np. sum)

引用自定义函数

def mynum(x:int) ->int:return x.min()df2.身高.agg (mymean)
dfg.agg(mymean)

处理缺失值

认识缺失值

系统默认的缺失值 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]])

缺失值查看

直接调用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。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()])

填充缺失值

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

df.fillna(value :用于填充缺失值的数值,也可以提供dict/Series/DataFrame 以进—步指明哪些索引/列会被替换不能使用 listmethod = None :有索引时具体的填充方法,向前填充,向后填充等limit = None :指定了 method 后设定具体的最大填充步长,此步长不能填充axis : index (0), columns (1)inplace = False
)

Series对象缺失值填充:

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(meth od='ffill'))

DataFrame对象缺失值填充:

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))

列的平均值来填充:

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]))
df

数据查重

标识出重复的行

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

df['dup' ] = df.duplicated( ['课程','开设'])
利用索引进行重复行标识df.index.duplicated()
df2 = df.set_index ( ['课程','开设'] )
df2.index.duplicated ()

直接删除重复的行

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

利用査重标识结果直接删除:

#df[~df.duplicated( )]df[~df . duplicated ( ['课程', '开设' ] )]

总结

本篇介绍了,pandas中常用的一些数据处理方法,结合上一篇,常用方法就介绍完了哦,务必好好整理!

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

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

相关文章

Linux 中断的 CPU 亲和性

文章目录 1. 前言2. 背景3. 什么是中断的 CPU 亲和性3. IRQ 中断 默认的 CPU 亲和性4. 硬件架构 CPU 固有 IRQ 中断亲和性5. 中断芯片 各中断 CPU 亲和性 初始化5.1 GIC v2 芯片的 SPI 中断 CPU 亲和性 初始化5.1.1 软件层次: 中断 CPU 亲和性 初始化5.1.2 中断芯片层次: GIC v…

前端面试从基础到资深问题汇总

基础篇 前端基础知识问答-js篇 JavaScript是前端开发的核心语言之一&#xff0c;以下是一些关于JavaScript的基础知识问答&#xff1a; Q: 什么是JavaScript&#xff1f; A: JavaScript是一种高级的、解释型的编程语言&#xff0c;通常用于网页开发中&#xff0c;实现网页的交…

Spring-cloud Alibaba组件--Dubbo

远程调用技术 RestFul风格 基于HTTP协议实现&#xff0c;而HTTP是一种网络传输协议&#xff0c;基于TCP&#xff0c;规定了数据传输的格式。 RPC协议 Remote Produce Call 远程过程调用&#xff0c;类似的还有 RMI &#xff08; remote method invoke&#xff09;。自定义数…

优思学院|抽样检验的概念和21种抽样方式

抽样检验的概念 根据事先制定的抽样方案&#xff0c;从一批产品中随机抽取一部分作为样品&#xff0c;以这部分样品的检验结果&#xff0c;对整批产品质量合格与否作出判定的活动过程&#xff0c;称为抽样检验。除了用于质量控制之外&#xff0c;抽样检验同样适用于在六西格玛…

AI工作流程设计的自动化优化:微软与斯坦福的新成果 - Trace

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

学习网络安全 为什么Linux首择Kali Linux? 以及如何正确的使用Kali Linux

1.什么是kali linux&#xff1f; Kali Linux是一款基于Debian的Linux发行版&#xff0c;主要用于网络安全测试和渗透测试。它由全球顶尖的安全专家和黑客社区维护开发&#xff0c;提供了丰富的工具和资源&#xff0c;用于测试安全性、漏洞利用和渗透测试。此外&#xff0c;Kal…

修复msvcp120.dll丢失的问题的几种简单方法,msvcp120.dll是什么

在使用电脑时&#xff0c;你可能会遭遇一个提示称“msvcp120.dll丢失”的错误信息。这个问题比较普遍&#xff0c;主要是因为你的系统中缺失了某个特定的动态链接库&#xff08;DLL&#xff09;文件。msvcp120.dll是由 Microsoft Visual C 可再发行包提供的关键文件&#xff0c…

一键切换阿里yum源(包括其他系统repo镜像查找方法)

一键切换阿里yum源 示例命令其他系统repo镜像GitHub文档 示例命令 # 备份旧源 mv CentOS-Base.repo CentOS-Base.repo.bak # 添加新源(阿里镜像源) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo其他系统repo镜像 这里的示例是用…

create-vue项目的README中文版

使用方法 要使用 create-vue 创建一个新的 Vue 项目&#xff0c;只需在终端中运行以下命令&#xff1a; npm create vuelatest[!注意] (latest 或 legacy) 不能省略&#xff0c;否则 npm 可能会解析到缓存中过时版本的包。 或者&#xff0c;如果你需要支持 IE11&#xff0c;你…

链表篇-02.从尾到头打印链表(反转链表)

解题思路&#xff1a; 链表从尾到头打印链表, 我的思路是 用三个指针,第一个指针(pre)指向指向头节点的前一个位置&#xff0c;第二个指针(cur)指向头节点&#xff0c; 然后依次往后执行&#xff0c;第三个指针用于临时记录第二个指针的下一个位置。 代码详情: import java.…

2024年中职云计算实验室建设及云计算实训平台整体解决方案

随着信息技术的飞速发展&#xff0c;云计算作为新一代信息技术的核心&#xff0c;正逐步渗透到各行各业&#xff0c;成为推动数字化转型的重要力量。为了适应这一趋势&#xff0c;中职教育作为技能型人才培养的重要阵地&#xff0c;亟需加强云计算实验室建设与云计算实训平台的…

西门子s7协议

S7Comm&#xff08;S7 Communication&#xff09;是西门子专有的协议&#xff0c;是西门子S7通讯协议簇里的一种。 S7通信协议是西门子S7系列PLC内部集成的一种通信协议&#xff0c;是S7系列PLC的精髓所在。 它是一种运行在传输层之上的&#xff08;会话层/表示层/应用层&…

速记Java八股文——并发编程篇

前言 分类汇总 20 常见的 Java集合 经典后端面试题&#xff0c;并对题目进行了精炼总结&#xff0c;旨在帮助大家高效记忆&#xff0c;在面试中游刃有余&#xff0c;不至于陷入词穷的窘境。 Java 并发编程 多线程怎么使用的&#xff1f; 继承 Thread 类。实现 Runnable 接口。…

STL 简介(标准模板库)

前言 通过对C的特性&#xff0c;类和对象的学习和C的内存管理对C基本上有了全面的认识&#xff0c;但是C的核心在于STL 一、STL简介 什么是STL C STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;是C编程语言中一个功能强大的模板库&#xff0c;…

【Linux】CentOS更换国内阿里云yum源(超详细)

目录 1. 前言2. 打开终端3. 确保虚拟机已经联网4. 备份现有yum配置文件5. 下载阿里云yum源6. 清理缓存7. 重新生成缓存8. 测试安装gcc 1. 前言 有些同学在安装完CentOS操作系统后&#xff0c;在系统内安装比如&#xff1a;gcc等软件的时候出现这种情况&#xff1a;&#xff08…

前端 socket.io 跨域

在使用Socket.io进行前端跨域通信时&#xff0c;可以通过设置Socket.io的cors选项来允许跨域请求。 以下是一个简单的例子&#xff0c;展示了如何在Node.js的服务器代码中配置Socket.io以允许跨域连接&#xff1a; const express require(express); const http require(http…

【C++进阶学习】第九弹——哈希的原理与实现——开放寻址法的讲解

前言&#xff1a; 在前面&#xff0c;我们已经学习了很多存储机构&#xff0c;包括线性存储、树性存储等&#xff0c;并学习了多种拓展结构&#xff0c;效率也越来越高&#xff0c;但是是否有一种存储结构可以在大部分问题中都一次找到目标值呢&#xff1f;哈希可能能实现 目录…

Vite项目中根据不同打包命令配置不同的后端接口地址,proxy解决跨域

在vite.config.ts同级目录添加两个文件 .env.development #开发环境 VITE_APP_ENV developmentVITE_APP_BASE_API .env.production #生产配置 VITE_APP_ENV productionVITE_APP_BASE_API https://www.bdjw.work代码中使用路径 const request axios.create({baseURL: i…

Maven已经导入Junit包,但是还是无法使用注解

Maven已经导入Junit包&#xff0c;但是还是无法使用注解 背景&#xff1a; 导入了Junit的依赖 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></d…

【Python的GDAL/OGR库】

GDAL/OGR库是一个开源的地理数据处理库&#xff0c;用于读取、写入和转换各种地理数据格式。以下是对GDAL/OGR库的详细解释&#xff1a; GDAL&#xff08;Geospatial Data Abstraction Library&#xff09; 定义&#xff1a;GDAL是一个在X/MIT许可协议下的开源栅格空间数据转…