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

一、废话不多说,直接开讲

1、DataFrame的索引和切片

1.1 选择列

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

#获取一列
df[col]
#获取多列
df[[col1 , col2]]
        除了传入具体的列名,我们可以传入具体列的位置,即第几行,对数据进行选取,通过传
入位置来获取数据时需要用到 iloc 方法。即如下代码
df.iloc[,[0,2]]

1.2 按行列索引选择

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

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

1.3 lociloc获取

看实例:

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

其中首先用np生成一个一维数组,用reshape将其转变成3行4列的二维数组,在通过DsteFrame将其装换成类似于二维数组的列表,并更改行索引名为a、b、c,列索引为A、B、C、D,再将这段数组用date来接收,用loc来索引名为b的行,用iloc来索引数值为1的索引行,其打印结果相同,如下 :

                    

 获取'A'列所有行
data.loc[:,'A']
data.iloc[:,0]

逗号左右分别表示行和列,两行代码运行结果都一样

                        

 
• 获取部分行部分列:
#获取a bc行,A B列
data.loc[['a','b','c'],['A','B']]
data.iloc[[0,1,2],[0,1]]

        上部分为获取行号为a,b,c,列号为A,B的结果,以及行索引值为0,1,2,列索引值为0,1的所对应的值 ,其所对应结果都一样

 获取满足条件的行:
df[df[“支出”]>10]
df[(df[“支出”]>10) & (df[“性别”]=='女')]

df[“支出”]>10为列‘支出’这一列中所对应的数值大于10的行,其返回的是布尔值,再用df将这个布尔值括起来即表示将布尔值为True的行打印出来

(df[“支出”]>10) & (df[“性别”]=='女') 这段则表示同时满足支出大于10,性别等于女的行。

2、isin()选择

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

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

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

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

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

df 是一个DataFrame对象。

col 是DataFrame中的一列(Series)。

.isin([1,3,5]) 是一个方法,用于判断col 中的元素是否包含在 [1,3,5] 这个列表中。

3、query()的使用

 使用boolean值表达式进行筛选

df.query( expr:语句表达式 inplace=False;是否直接替换原数据框 )

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

expr是一个字符串,表示查询条件。查询条件可以使用DataFrame中的列名,并使用关系运算符和逻辑运算符进行比较和组合。

import pandas as pd# 创建一个示例DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [6, 7, 8, 9, 10],'C': [11, 12, 13, 14, 15]}
df = pd.DataFrame(data)# 使用query函数进行查询
result = df.query('A > 2')  # 查询A列大于2的行
print(result)result = df.query('A > 2 and B < 9')  # 查询A列大于2且B列小于9的行
print(result)

4、排序

4.1 按照索引进行排序

具体用法如下:

df.sort_index(level :(多重索引时)指定用于排序的级别顺序号/名称18ascending = True :是否为升序排列,多列时以表形式提供inplace = False :na_position = 'last‘ :缺失值的排列顺序,first/last
)df.sort_index(axis=0, ascending=True, inplace=False)

axis 参数表示排序的轴方向,可以是 0 或 1,默认值是 0,表示按行索引进行排序。

ascending 参数表示排序的顺序,可以是 True 或 False,默认值是 True,表示升序排序。

inplace 参数表示是否在原地进行排序,可以是 True 或 False,默认值是 False,表示返回一个排序后的副本,原数据不变。

import pandas as pd# 创建一个示例 DataFrame
data = {'A': [2, 1, 3],'B': [5, 3, 1]}
df = pd.DataFrame(data, index=[2, 1, 3])# 按行索引进行升序排序
result = df.sort_index()
print(result)# 按列索引进行降序排序
result = df.sort_index(axis=1, ascending=False)
print(result)

在示例中,创建了一个 DataFrame,并使用 sort_index() 方法按行索引进行升序排序和按列索引进行降序排序。其打印结果为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

4.2按照变量值排序

用于按照指定列的值进行排序,语法如下:

df.sort_values(by :指定用于排序的变量名,多列时以列表形式提供ascending = True :是否为升序排列inplace = False :na_position = 'last‘ :缺失值的排列顺序,first/last
)
df.sort_values(by, axis=0, ascending=True, inplace=False)

其中by参数表示排序的依据列,可以是列标签(字符串)或列标签列表(字符串列表)

import pandas as pd# 创建一个示例 DataFrame
data = {'A': [2, 1, 3],'B': [5, 3, 1]}
df = pd.DataFrame(data)# 按照列 'A' 的值进行升序排序
result = df.sort_values(by='A')
print(result)# 按照列 'B' 和 'A' 的值进行降序排序
result = df.sort_values(by=['B', 'A'], ascending=[False, False])
print(result)

5、计算新变量

5.1 新变量为常数
df['vamame'] = value#用于向DataFrame中添加新列或修改现有列的操作。
import pandas as pd# 创建一个示例 DataFrame
data = {'A': [1, 2, 3],'B': [4, 5, 6]}
df = pd.DataFrame(data)# 添加新列 'C',并赋予新的值
df['C'] = [7, 8, 9]
print(df)# 修改列 'A' 的值
df['A'] = [10, 11, 12]
print(df)
5.2 基于原变量做简单四则运算
df['var'] = df['oldvar'] *100
df['var'] = df.oldvar * 100

        这两个语句都是用来创建一个新的列 'var',并将 'oldvar' 列中的值乘以100赋给 'var' 列。

        第一个语句 df['var'] = df['oldvar'] * 100 使用了方括号将列名 'var' 和 'oldvar' 包裹起来,表示访问和操作 DataFrame 中的列。

        第二个语句 df['var'] = df.oldvar * 100 使用了点运算符,将 DataFrame 中的 'oldvar' 列作为一个属性进行访问。

        两个语句效果相同,都是将 'oldvar' 列中的每个值乘以100,然后赋给 'var' 列。

 df ['new_val'] = df .总分 + df .名次 + 1
# 使用内部函数计算
import math
df['n3'] = math.sqrt(9)
df['n4'] = math.sqrt(df.体重)  #报错
import numpy
df['n4'] = numpy.sqrt(df.体重)
  • df['n3'] = math.sqrt(9),这行代码将 math.sqrt(9) 的结果(即3)赋给了新的列 'n3'。因为求根号9的结果是3。

  • df['n4'] = math.sqrt(df.体重),这行代码试图计算 DataFrame 列 '体重' 中每个值的平方根,并将结果赋给新的列 'n4'。但是这行代码会报错,因为 math.sqrt() 函数不支持作用于整个 DataFrame 列,只能逐个计算单个值的平方根。

  • df['n4'] = numpy.sqrt(df.体重),这行代码使用了 numpy.sqrt() 函数。numpy.sqrt() 函数支持对整个 DataFrame 列进行计算,所以可以成功求出 '体重' 列每个值的平方根,并将结果赋给新的列 'n4'。

5.3 基于一个原变量做函数运算
df.apply(
func : 希望对行/列执行的函数表达式
axis = 0 : 针对行还是列逬行计算
'index': 针对每列进行计算
'columns': 针对每行逬行计算
)

简化的用法:

df [' varname ' ] = df. oldvar. apply (函数表达式)
df['n5'] = df.体重.apply(math.sqrt)
df['n7'] = df.体重.apply(numpy.sqrt)
# 使用自定义函数
def get_first(tmp):return tmp[:1]
df['n6'] = df.开设.apply(get_first)

5.4 不修改原df,而是生成新的df

用法如下:

df.assign(varname = expression)
# 返回新的dataframe
df2 = df.assign(n8 = df.课程.apply(get_first))
5.5 在指定位置插入新变量列
df.insert(loc :插入位置的索引值,0 <= loc <= len (columns)column :插入的新列名称value : Series 或者类数组结构的变量值allow_duplicates = False :是否允许新列重名
)#该方法会直接修改原 df
# 指定位置增加新列
df.insert(1,'new_col',100)#插入位置索引值为1,插入名称为new_col,插入变量值为100
df.insert(1,'new_col2',df.课程.apply(get_first))

其中

  • df.insert(1,'new_col',100)这行代码在索引位置1之前插入了一个名为 'new_col' 的新列,并将所有的值初始化为 100。这意味着新列将位于原始 DataFrame 的第二列位置。

  • df.insert(1,'new_col2',df.课程.apply(get_first))这行代码在索引位置1之前插入了一个名为 'new_col2' 的新列,并使用 df.课程.apply(get_first) 来为新列赋值df.课程 是一个 Series 或 DataFrame 列,apply() 函数将 get_first 函数应用于每个元素,并返回一个新的 Series 或 DataFrame 列。因此,新列 'new_col2' 的值将根据 get_first 函数的结果进行赋值。请注意,get_first 是一个自定义的函数,它的具体实现需要根据具体的需求来编写。

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

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

相关文章

SAPUI5基础知识20 - 对话框和碎片(Dialogs and Fragments)

1. 背景 在 SAPUI5 中&#xff0c;Fragments 是一种轻量级的 UI 组件&#xff0c;类似于视图&#xff08;Views&#xff09;&#xff0c;但它们没有自己的控制器&#xff08;Controller&#xff09;。Fragments 通常用于定义可以在多个视图中重用的 UI 片段&#xff0c;从而提…

集成千兆网口(Gigabit Ethernet Port)的作用主要是提供高速的有线网络连接,其工作原理涉及以下几个关键点:

传输速率&#xff1a; 千兆网口支持的最高传输速率达到1 Gbps&#xff08;即每秒10亿位&#xff09;&#xff0c;是传统百兆网口&#xff08;100 Mbps&#xff09;的十倍速度。这使得它能够处理更大量、更高质量的数据传输。 数据传输效率&#xff1a; 千兆网口能显著提高局域…

C#如何引用dll动态链接库文件的注释

1、dll动态库文件项目生成属性中要勾选“XML文档文件” 注意&#xff1a;XML文件的名字切勿修改。 2、添加引用时XML文件要与DLL文件在同一个目录下。 3、如果要是添加引用的时候XML不在相同目录下&#xff0c;之后又将XML文件复制到相同的目录下&#xff0c;需要删除引用&am…

【机器学习】Python、NumPy和向量化的基础知识以及三者结合的用法和示例

引言 在机器学习中&#xff0c;NumPy是一个非常重要的库&#xff0c;特别是在进行向量化操作时。向量化是一种优化技术&#xff0c;可以显著提高数组计算的效率&#xff0c;特别是在处理大型数据集时。NumPy提供了丰富的数组运算功能&#xff0c;使得向量化操作变得简单高效 文…

驾驭代码的无形疆界:动态内存管理揭秘

目录 1.:为什么要有动态内存分配 2.malloc和free 2.1:malloc 2.2:free 3.calloc和realloc 3.1:calloc 3.1.1:代码1(malloc) 3.1.2:代码2(calloc) 3.2:realloc 3.2.1:原地扩容 3.2.2:异地扩容 3.2.3:代码1(原地扩容) 3.2.3:代码2(异地扩容) 4:常见的动态内存的错误…

掀桌子了!原来是咱们的大屏设计太酷,吓着前端开发老铁了

掀桌子了&#xff01;原来是咱们的大屏设计太酷&#xff0c;吓着前端开发老铁了 艾斯视觉观点认为&#xff1a;在软件开发的世界里&#xff0c;有时候创意和设计的火花会擦得特别亮&#xff0c;以至于让技术实现的伙伴们感到既兴奋又紧张。这不&#xff0c;我们的设计团队刚刚…

Vue的安装配置

1.安装node js Node.js — 在任何地方运行 JavaScript (nodejs.org) 2.测试nodejs是否安装成功 node -v npm -v3.通过npm 安装 vue npm install -g vue/cli4.测试vue是否安装成功 vue --version5.打开PyCharm&#xff0c;创建项目&#xff1a;flask-web vue create flask…

【H.264】H.264详解(二)—— H264视频码流解析示例源码

文章目录 一、前言二、示例源码【1】目录结构【2】Makefile源码【3】h264parser.c源码【4】编译运行【5】源码下载地址 声明&#xff1a;此篇示例源码非原创&#xff0c;原作者雷霄骅。雷霄骅&#xff0c;中国传媒大学通信与信息系统专业博士生&#xff0c;在此向雷霄骅雷神致敬…

MySQL客户端命令一节将.sql文件导入MySQL

MySql客户端命令 直接输入SQL语句 使用MySQL客户端连接到服务器之后&#xff0c;可以发送SQL语句到服务器执行&#xff0c;并且以&#xff1b;和\g, \G作为结束不同的结束方式显示内容有所不同** TIPS: ;和\g结尾以表格的形式显示结果\G以行的形式显示结果 在连接到服务器之后…

FineBI连接MySQL5.7

一、在FineBI系统管理中&#xff0c;点击【新建数据库连接】 选择MySQL数据库 配置数据库连接&#xff0c;如下&#xff0c;其中数据库名称就是需要连接的目标数据库

5.CSS学习(浮动)

浮动&#xff08;float&#xff09; 是一种传统的网页布局方式&#xff0c;通过浮动&#xff0c;可以使元素脱离文档流的控制&#xff0c;使其横向排列。 其编写在CSS样式中。 float:none(默认值) 元素不浮动。 float:left 设置的元素在其包含…

Web3 职场新手指南:从技能到素养,求职者如何脱颖而出?

随着 2024 年步入下半年&#xff0c;Web3 行业正在经历一系列技术革新。通过改进的跨链交互机制和兼容性&#xff0c;逐步消除市场碎片化的问题。技术的进步为开发者和用户都打开了新的前景。然而&#xff0c;复杂的技术和快速变化的市场环境也让许多新人望而却步。求职者如何找…

Unity 之 【Android Unity 共享纹理】之 Android 共享图片给 Unity 显示

Unity 之 【Android Unity 共享纹理】之 Android 共享图片给 Unity 显示 目录 Unity 之 【Android Unity 共享纹理】之 Android 共享图片给 Unity 显示 一、简单介绍 二、共享纹理 1、共享纹理的原理 2、共享纹理涉及到的关键知识点 3、什么可以实现共享 不能实现共享…

LeetCode 2844.生成特殊数字的最少操作(哈希表 + 贪心)

给你一个下标从 0 开始的字符串 num &#xff0c;表示一个非负整数。 在一次操作中&#xff0c;您可以选择 num 的任意一位数字并将其删除。请注意&#xff0c;如果你删除 num 中的所有数字&#xff0c;则 num 变为 0。 返回最少需要多少次操作可以使 num 变成特殊数字。 如…

Web漏洞扫描工具(AWVS、Goby)

一、背景 想针对自己项目或者小公司的Web安全做相关扫描&#xff0c;自己做漏洞进行自查工作&#xff0c;能够减少自身系统的安全风险&#xff0c;提高系统的安全性。但是没有找到一些开源性质的、扫描质量比较高的相关工具&#xff0c;使用安全公司的专业产品价格又承受不起。…

MySQL_JDBC

目录 一、JDBC常用的接口和类 1.1 数据库连接 Connection 1.2 Statement 对象 二、JDBC的使用 总结 【Java 的数据库编程】 JDBC 即 Java Database Connectivity (Java数据库连接)&#xff0c;是一种用于执行 SQL 语句的 Java API。这个 API 由 java.sql.*,javax.sql.* …

kettle从入门到精通 第八十一课 ETL之kettle kettle中的json对象字段写入postgresql中的json字段正确姿势

1、上一节可讲解了如何将json数据写入pg数据库表中的json字段&#xff0c;虽然实现了效果&#xff0c;但若客户继续使用表输出步骤则仍然无法解决问题。 正确的的解决方式是设置数据库连接参数stringtypeunspecified 2、stringtypeunspecified 参数的作用&#xff1a; 当设置…

ERROR: Cannot find command ‘git’- do you have ‘git’ installed and in your PATH?

ERROR: Cannot find command ‘git’- do you have ‘git’ installed and in your PATH? 目录 ERROR: Cannot find command ‘git’- do you have ‘git’ installed and in your PATH? 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/61780…

Java开发新趋势!MyEclipse v2024.1全新首发——支持AI编码协助

在MyEclipse 2024中&#xff0c;通过Copilot集成提供的AI编码协助&#xff0c;让开发者的生产力提高了近10倍&#xff1b;同时支持Java 22&#xff0c;并部署到最新版本的应用服务器(如WildFly和Payara)&#xff1b;拥有更高性能的Spring工具支持更流畅的编码体验&#xff0c;而…

新增ClamAV病毒扫描功能、支持Java和Go运行环境,1Panel开源面板v1.10.12版本发布

2024年7月19日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布了v1.10.12版本。 在这一版本中&#xff0c;1Panel新增了多项实用功能。社区版方面&#xff0c;1Panel新增ClamAV病毒扫描功能、支持Java和Go运行环境&#xff0c;同时1Panel还新增了文件编辑器…