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,一经查实,立即删除!

相关文章

优思学院|抽样检验的概念和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镜像 这里的示例是用…

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

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

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

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

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

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

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

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

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

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

【初阶数据结构题目】2.移除元素

文章目录 顺序表算法题代码&#xff1a; 顺序表算法题 点击链接做题 移除元素 思路&#xff1a;定义两个变量指向数组第一个位置&#xff0c;判断nums[src]是否等于val 相等&#xff0c;src不相等&#xff0c;nums[dst] nums[src],src,dst 代码&#xff1a; int removeElem…

如何使用CANoe自带的TCP/IP Stack验证TCP的零窗口探测机制

如果想利用CANoe自带的TCP/IP协议栈验证TCP的零窗口探测机制,就必须添加一个网络节点并配置独立的CANoe TCP/IP协议栈,作为验证对象。而与它进行TCP通信的对端也是一个网络节点,但不要配置TCP/IP协议栈,而是使用CAPL代码在底层组装TCP报文模拟TCP通信过程。这样可以尽量减少…

轻松入门Linux—CentOS,直接拿捏 —/— <1>

一、什么是Linux Linux是一个开源的操作系统&#xff0c;目前是市面上占有率极高的服务器操作系统&#xff0c;目前其分支有很多。是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统 Linux能运行主要的UNIX工具软件、应用程序和网络协议 Linux支持 32…

基于Drone实现CI/CD【0到1架构系列】

CI/CD是持续性集成和持续性部署&#xff0c;简单来讲就是自动化构建和自动化部署。目前有很多集成方案&#xff0c;也有很多组装方案&#xff0c;只要能实现自动化构建出制品&#xff0c;再自动部署到生产环境就行。 目前很多源代码都集成了CI/CD功能&#xff0c;drone也是目前…

还在用JVM跑你的Java代码吗?太慢了,试试Oracle的GraalVM吧

前言 对于Java开发者们来说&#xff0c;几乎每天都在和JVM打交道&#xff0c;然而JVM即将过时了。那些对新技术保持敏锐洞察力的开发者&#xff0c;可能已经在生产环境中部署GraalVM生成的二进制程序了&#xff0c;小伙伴们&#xff0c;你们已经用起来了吗&#xff1f; Graal…

【初阶数据结构题目】3.删除有序数组中的重复项

文章目录 顺序表算法题代码&#xff1a; 顺序表算法题 点击链接做题 删除有序数组中的重复项 思路&#xff1a;定义两个指针变量。dst指向数组第一个位置&#xff0c;src指向数组第二个位置。判断nums[dst]是否等于nums[src] 相等&#xff0c;src不相等&#xff0c;dst,nums[…

Windows 11 桌面模拟

Windows 11 桌面模拟 文章目录 Windows 11 桌面模拟代码结构HTML结构CSS样式JavaScript功能 源码效果图 代码结构 HTML结构 <html>: HTML文档的根元素。<head>: 包含文档的元数据&#xff0c;如标题和样式。<base>: 指定相对URL的基准。<title>: 指定…

力扣刷题160 相交链表

题目 力扣题目地址&#xff0c;点此可直接跳转 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 来源&#xff1a;力扣&…

60、redis安装和部署

一、关系型数据库与非关系型数据库 1.1、关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上一般面向于记录。SQL语句&#xff08;标准数据查询语言&#xff09;就是一种基于关系型数据库的语言&#xff0…

pycharm 新建Python项目 使用anaconda环境

1.pycharm 新建完Python项目 2.文件-设置-具体项目-Python解释器-添加解释器-Conda执行文件选择你自己anaconda安装目录下Scripts\conda.exe -加载环境-选择现有的Conda环境或者新建一个环境