NumpyPandas:Pandas库(25%-50%)

news2024/12/27 17:44:32

目录

前言

一、列操作

1.修改变量列

2.筛选变量列

3.删除变量列

4.添加变量列

二、数据类型的转换

1.查看数据类型

2.将 ok的int类型转换成float类型

3.将ar的float类型转换成int类型

三、建立索引

1.建立DataFrame时建立索引

2.在读入数据时建立索引

3.指定某列或者多列为索引列

4.将索引还原变量列

四、引用和修改索引

1.引用索引

2.修改索引名

3.修改索引名

4.更新索引

五、Series的索引和切片

1.索引

2.切片

3.loc 和 iloc

六、DataFrame的索引和切片

1.选择列

2.选择行

3.获取满足条件的行

4.isin()选择

5.query()

总结


前言

        前一篇讲了Pandas库的安装和两种对象的创建以及一些基础方法:

Numpy&Pandas:pandas库的安装,Pandas(0-25%)-CSDN博客

今天接着来讲Pandas库后续内容(25%-50%)

 

一、列操作

  • citys

1.修改变量列

  • columns修改
# 修改变量列
citys.columns = ['ar','pp']    
# citys.columns
citys          # 直接改变原数据

输出:

 

  • rename修改
city = citys.rename(columns = {'ar':'area','pp':'population'},inplace = False)
citys    # inplace = Fasle 则原数据列名不变    = True 则原数据列名改变
# citys.columns
city    # 接收之后的列名改变

输出:注意inplace参数的使用

 

2.筛选变量列

  • 取一列和取多列
# 筛选变量列
print(citys.ar)          # 取一列
print(citys['ar'])
citys[['ar','pp']]       # 取多列 内部用列表

输出:

 

3.删除变量列

  • 先新增一列,不是说删除变量列必须先新增,是这里的数据框列数太少了,新增后看着更直观
citys['aaa'] = citys['ar'].rank(ascending=False)  
citys

输出:

 

  • 删除变量列
# 删除变量列
citys.drop(columns = ['aaa'])        # 删除单列
citys.drop(columns = ['aaa','ar'])   # 删除多列   输出了即原数组没有被改变

输出:一旦代码运行之后输出了,就说明元数据并没有被更改

 

4.添加变量列

  • 根据新数据添加和根据原数据添加
# 添加变量列
citys['pp_rank'] = pd.Series([1,2,3,'NaN'],['beijing','shanghai','guangzhou','tianjin'])
# 根据新数据添加
citys['ok'] = pd.Series(np.arange(4),index = ['beijing','shanghai','guangzhou','tianjin']) 
# ok列原索引是 0 1 2 3 与citys索引不符 所以必须得加上index 如果没加的话ok列全为NaN
# pp_rank 列也是如此

citys['sum'] = citys['ar']+citys['pp']   # 根据原数据添加  NaN跟任何数字进行算术操作 结果通常都是NaN
citys

输出:

 

二、数据类型的转换

1.查看数据类型

# 查看数据类型
citys.dtypes

输出:会输出每一列的数据类型,object可以看作str

 

2.将 ok的int类型转换成float类型

# 将 ok的int类型转换成float类型
citys['ok'] = citys['ok'].astype('float')  # 用原列将修改后的列接收 不然原列不会更改
citys.dtypes

输出:跟上面的结果进行对比,会发现ok的数据类型被改为了float

 

3.将ar的float类型转换成int类型

# 将ar的float类型转换成int类型
citys['ar']=citys['ar'].astype('int',errors = 'ignore')  # errors='raise'转换出错时抛出错误,'ignore'忽略
citys.dtypes  # 因为ar列里有NaN 所以未转换成功

输出:因为ar列里有NaN,所以没有转换成功

 

三、建立索引

1.建立DataFrame时建立索引

# 建立DataFrame时建立索引  以字典的形式给定列名和每行的值  每行的值数量须一致
df = pd.DataFrame( {'varl' : 1.0, ' var2' :[1,2,3,4], 'var3' : ['test', 'python','test','hello'] , 'var4' : 'cons'} , index =[1,2,3,4])
df

输出:以字典的形式给定列名和每行的值  每行的值数量须一致

 

2.在读入数据时建立索引

# 在读入数据时建立索引 index_col= 指定哪一列或者多列当做索引
df_stu = pd.read_csv('./students.csv',header=None,names=['id','name','age','gender','clazz'],index_col=['id','name'])

print(df_stu)
# df_stu['id']  # id变成行索引 不能当做列名使用 会报错
df_stu['age']

输出:

输出单列时:因为id name 都被用来当做行索引了

 

3.指定某列或者多列为索引列

# 指定某列或者多列为索引列
stu = pd.read_csv('./students.csv',header = None).set_index([0,1])  
stu

输出:默认的列名中0 1 被指定为索引列

 

4.将索引还原变量列

# 将索引还原变量列 
pp = stu.reset_index(drop = True)    # drop=True 会将原索引直接删除 
print(pp)
stu.reset_index()  # 将索引还原变量列  以默认值作为行索引

输出:drop=True 将原索引的id和name直接删除

输出:reset_index()   将索引还原变量列  以默认值作为行索引

 

四、引用和修改索引

  • citys:

1.引用索引

# 引用索引
citys.index

输出:

Index(['beijing', 'guangzhou', 'shanghai', 'tianjin'], dtype='object')

 

2.修改索引名

# 修改索引名
# 本质上和变量列名的修改方式相同
citys.index.name = 'citys' # 将这个df数据的索引命名为citys
citys

输出:

 

3.修改索引值

# 修改索引值
# 这里的修改本质上是全部替换
citys.index = ['bj','gz','sh','tj']
citys

输出:

 

4.更新索引

可以自定义索引的排列顺序

data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
print(df)

# 使用 reindex 重新排列索引
new_index = ['c', 'b', 'a', 'd']
df_reindexed = df.reindex(new_index)

print(df_reindexed)

输出:可以看到,前后数据框的行索引名改变了。同时还新增了一行,但是新增元数据框没有的索引名,会用NaN进行填充。

 

五、Series的索引和切片

  • 建立一个Series对象
# Series的索引和切片
data=pd.Series([4,3,25,2,3],index=list('abcde'))
data

输出:

1.索引

# 索引
print(data[0])    # 根据索引值获取     
print(data[-1])
print(data.c)
data['a']         # 根据索引名称获取

输出:

 

2.切片

# 切片
print(data['a':'b'])
print(data[0:2])
print(data[::-1])
print(data[data>3])   # 布尔取值 根据内部条件判断是True False 然后打印True

输出:

 

3.loc 和 iloc

# loc 和 iloc
data=pd.Series([5,3,2,5,9],index=[1,2,3,4,5])
print(data)
print(data.loc[1])            # 通过行的名称获取    名称索引
print(data.iloc[1])           # 通过行的索引值获取  即位置索引

输出:loc通过行的名称获取值 ,iloc通过行的位置获取值

 

六、DataFrame的索引和切片

  • citys

1.选择列

# 选择列
print(citys['ar'])           # 获取一列
print(citys[['pp','aaa']])   # 获取多列
citys

输出:

 

2.选择行

  • 取出单行
# 按行索引选择
print(citys.loc['bj'],'\n')   # 按行名称索引
print(citys.iloc[0],'\n')     # 按行位置索引  

输出:loc和iloc的用法和Series对象一致

  • 取出一列的所有行
print(citys.loc[:,'ar'],'\n')      # 取出指定名称的列的所有行 
print(citys.iloc[:,0])             # 取出指定位置的所有行

输出:

  • 取出指定行,指定列
# 注意前后类型的统一   名称行索引对应名称列索引    位置行索引对应位置列索引
print(citys.loc[['bj','tj'],['ar','pp']])  # 获取指定名称的多行的指定多列  
print(citys.iloc[[0,1,2],[0,1,2]])         # 获取指定位置的多行的指定多列

输出:

 

3.获取满足条件的行

# pandas里的与或非分别用  & | ~ 表示
print(citys[citys['ar']>100])          # 单条件布尔取值
citys[(citys['ar']>100) & (citys['pp']>1500)]   # 多条件布尔取值

输出:pandas里的与或非分别用  & | ~ 表示

 

4.isin()选择

data = {
    'var1': [1, 1, 1, 1],
    'var2': [1.0, 1.0, 1.0, 1.0],
    'var3': [1, 2, 3, 4],
    'var4': ['test', 'python', 'test', 'hello'],
}

df = pd.DataFrame(data)
df


print(df[ df.var4.isin(['test','hello'])],'\n')      # 取出含有相应字符串的行
result = df[df['var3'].isin([2, 3, 4])]      # 取出var3列含有2 3 4 的行
print(result)

输出:

 

5.query()

# query()的使用
data = {'A': [1, 2, 3, 4],
        'B': [5, 6, 7, 8],
        'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)
df.index = ['val1', 'val2', 'val3', 'val4']
df

  • 单个条件
result = df.query('A > 2')  # 取出 'A'列中值大于2的行
result

输出:

  • 使用@引入变量
a = 2
result = df.query('A > @a')   # 使用@引入变量
result

输出:

  • 使用多个判断条件
result = df.query('A > 2 and B < 8')   # 使用多个判断条件
result

输出:

 

总结

        以上就是今天的全部内容,大概占pandas库的四分之一,下一篇将会把剩下的全部更新完。

pandas库的内容很多,要多多练习才能熟练掌握。

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

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

相关文章

PHP8.3.9安装记录,Phpmyadmin访问提示缺少mysqli

ubuntu 22.0.4 腾讯云主机 下载好依赖 sudo apt update sudo apt install -y build-essential libxml2-dev libssl-dev libcurl4-openssl-dev pkg-config libbz2-dev libreadline-dev libicu-dev libsqlite3-dev libwebp-dev 下载php8.3.9安装包 nullhttps://www.php.net/d…

【Linux】生产者消费者模型 + 线程池的介绍和代码实现

前言 上节我们学习了线程的同步与互斥&#xff0c;学习了互斥锁和条件变量的使用。本章我们将学习编程的一个重要模型&#xff0c;生产者消费者模型&#xff0c;并且运用之前学的线程同步和互斥的相关接口来实现阻塞队列和环形队列&#xff0c;最后再来实现一个简易的线程池。 …

springboot电子产品销售系统-计算机毕业设计源码80294

摘 要 电子商务行业在全球范围内迅速发展&#xff0c;随之而来的是电子产品销售市场的快速增长和消费者对在线购物体验的需求提升&#xff0c;因此&#xff0c;电子产品销售系统应运而生。该系统旨在满足电子产品市场的需求&#xff0c;提供全面的购物功能和高效的管理操作。 …

严格模式 模块化开发

严格模式 当你在脚本或函数的顶部添加"use strict"语句时&#xff0c;你的代码将在严格模式下执行。这可以帮助你避免某些常见的编程陷阱&#xff0c;例如在不声明变量的情况下就使用它们&#xff0c;或者删除变量、函数或函数参数。在严格模式下&#xff0c;这样的…

进阶篇,内附代码:锂电池二阶模型-离线与在线参数辨识

锂电池二阶模型-在线参数辨识 背景二阶等效电路模型介绍二阶模型的离线参数辨识二阶模型的RLS表达式递推代码已知问题背景 锂电池一阶戴维南等效模型的参数辨识方法,已经在前面两期详细地讲解了一轮。 一阶模型-离线参数辨识一阶模型-在线参数辨识本期继续讲解一下如何进行二…

stm32——lcd液晶显示

一.液晶屏介绍 液晶显示屏是由液晶显示面板&#xff0c;电容触摸屏&#xff0c;pcb底板构成。在液晶显示屏里我们有带控制芯片的还有不带控制芯片的。对于低端的微控制器它不能直接控制液晶面板&#xff0c;所以需要给液晶控制面板而外增加一个液晶控制芯片。对于单片机stm32f4…

Photos框架 - 自定义媒体选择器(UI预览)

引言 在前面的博客中我们已经介绍了使用媒体资源数据的获取&#xff0c;以及自定义的媒体资源选择列表页。在一个功能完整的媒体选择器中&#xff0c;预览自然是必不可少的&#xff0c;本篇博客我们就来实现一个资源的预览功能&#xff0c;并且实现列表和预览的数据联动效果。…

内网横向——远程桌面利用

文章目录 一、远程桌面的确定和开启二、RDP Hijacking 网络拓扑&#xff1a; 攻击机kali IP&#xff1a;192.168.111.0 跳板机win7 IP&#xff1a;192.168.111.128&#xff0c;192.168.52.143 靶机win server 2008 IP&#xff1a;192.168.52.138 一、远程桌面的确定和开启 下面…

VMware、Docker - 让虚拟机走主机代理,解决镜像封禁问题

文章目录 虚拟机全局代理配置找到 VMnet8 的 IPv4 地址代理相关配置虚拟机代理配置 Docker 代理配置修改镜像修改 Docker 代理配置 虚拟机全局代理配置 找到 VMnet8 的 IPv4 地址 a&#xff09;打开此电脑&#xff0c;输入 “控制面板”&#xff0c;然后回车. b&#xff09;之…

元注解相关知识总结

Target 这个注解适用于决定注解的适用范围&#xff0c;例如适用于构造器&#xff0c;方法&#xff0c;字段等 Retention 这个注解的作用是确定注解的生命周期一般用得比较多的是RunTime这样就可以在运行环境中使用它&#xff0c;赋值的方式一般是使用value进行赋值 SOURCE 代…

【初阶数据结构篇】顺序表的实现(赋源码)

文章目录 本篇代码位置顺序表和链表1.线性表2.顺序表2.1 概念与结构2.2分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.3.1动态顺序表的初始化和销毁及打印2.3.2动态顺序表的插入动态顺序表的尾插动态顺序表的头插动态顺序表的在指定位置插入数据 2.3.3动态顺序表…

spring常用注解有哪些

Spring框架使用了大量的注解来简化配置和开发&#xff0c;以下是一些常用的Spring注解&#xff1a; 1.Component&#xff1a;通用的构造型注解&#xff0c;用于标记一个类作为Spring管理的组件&#xff0c;通常用于自定义组件。 2.Autowired&#xff1a;用于自动装配Bean&#…

Android Add a Header to the GridLayout

RecyclerView 添加 Header, RecycleView 设置 LayoutManager 为 GridLayoutManger的 时候&#xff1b; Header 要占用3行 val manager GridLayoutManager(activity, 3)binding.sleepList.layoutManager manager// span size for each position, and assign it to manager.spa…

Golang零基础入门课_20240726 课程笔记

视频课程 最近发现越来越多的公司在用Golang了&#xff0c;所以精心整理了一套视频教程给大家&#xff0c;这个只是其中的第一部&#xff0c;后续还会有很多。 视频已经录制完成&#xff0c;完整目录截图如下&#xff1a; 课程目录 01 第一个Go程序.mp402 定义变量.mp403 …

github简单地操作

1.调节字体大小 选择options 选择text 选择select 选择你需要的参数就可以了。 2.配置用户名和邮箱 桌面右键&#xff0c;选择git Bash Here git config --global user.name 用户名 git config --global user.email 邮箱名 3.用git实现代码管理的过程 下载别人的项目 git …

PlatformIO+ESP32S3学习:通过WIFI与和风天气API获取指定地点的天气情况并显示

1. 硬件准备 你只需要有一个ESP32S3开发板。我目前使用的是&#xff1a; 购买地址&#xff1a;立创ESP32S3R8N8 开发板 2. 和风天气API 2.1. 和风天气介绍 和⻛天气是中国领先的气象科技服务商、国家高新技术 企业&#xff0c;致力于运用先进气象模型结合大数据、人工智能 技术…

Halcon 引擎方式调试

1.C# 端添加代码 启动调试模式 public HDevEngine MyEngine new HDevEngine(); // halcon引擎;// 启动调试服务 MyEngine.StartDebugServer();2.Halcon程序添加到进程 打开Halcon程序 【执行】>【附加到进程】 点击【确定】 3.C# 程序执行到相关位置 C# 程序执行调用…

大模型学习笔记十四:Agent模型微调

文章目录 一、大模型需要Agent技术的原因二、Prompt Engineering可以实现Agent吗&#xff1f;&#xff08;1&#xff09;ReAct原理展示和代码&#xff08;2&#xff09;ModelScope&#xff08;3&#xff09;AutoGPT&#xff08;4&#xff09;ToolLLaMA 三、既然AutoGPT可以满足…

Java SE 文件上传和文件下载的底层原理

1. Java SE 文件上传和文件下载的底层原理 文章目录 1. Java SE 文件上传和文件下载的底层原理2. 文件上传2.1 文件上传应用实例2.2 文件上传注意事项和细节 3. 文件下载3.1 文件下载应用实例3.2 文件下载注意事项和细节 4. 总结&#xff1a;5. 最后: 2. 文件上传 文件的上传和…

【C语言】指针基础知识理解

1. 内存和地址 1.1 内存 在讲内存和地址之前&#xff0c;我们想有个⽣活中的案例&#xff1a; 假设你在学校宿舍楼&#xff0c;但是宿舍的房间没有编号&#xff0c;你的⼀个朋友发微信来找你玩&#xff0c;如果想找到你&#xff0c;就得挨个房⼦去找&#xff0c;这样效率会很…