【数据处理包Pandas】DataFrame数据选择的基本方法

目录

    • 一、选择行/列
      • (一)读取文件
      • (二)选择行
      • (三)选择列
      • (四)选择多行多列
    • 二、带条件筛选
      • (一)startswith()方法
      • (二)mean()方法
      • (三)columns属性
      • (四)apply()方法
      • (五)copy()方法
      • (六)groupby()方法


首先导入 NumPy 和 Pandas 库。

import numpy as np
import pandas as pd

数据集team.xlsx下载地址:下载team.xlsx

一、选择行/列

(一)读取文件

pd.read_excel()格式:pandas.read_excel(io, sheetname, header=0, index_col=None, names=None, dtype)

参数名称说明
io接收string ,表示文件路径,无默认
sheetname接收string、int,代表excel表内数据的分表位置,默认为0
header接收int或sequence,表示将某行数据作为列名,默认为infer,表示自动识别
names接收int、sequence或者False,表示索引列的位置,取值为sequence则代表多重索引,默认为None
index_col接收int、sequence或者False,表示索引列的位置,取值为sequence则代表多重索引,默认为None
dtype接收dict,代表写入的数据类型(列名为key,数据格式为values),默认为None
df = pd.read_excel('team.xlsx')
df

在这里插入图片描述

(二)选择行

选取通过 DataFrame 提供的headtail方法可以得到多行数据,但是用这两种方法得到的数据都是从开始或者末尾获取连续的数据, 而利用sample可以随机抽取数据并显示。

  • head():认获取前 5 行
  • head(n):获取前 n 行
  • tail():默认获取后 5 行
  • tail(n):获取后 n 行
  • sample(n):随机抽取 n 行显示
df.head(10)

在这里插入图片描述

(三)选择列

选择列的方法主要基于把 DataFrame 看成字典的观点。

1、选择单列

# 选择单列
# df['team']
df['team'].unique()

unique()方法:去掉重复值

array(['E', 'C', 'A', 'D', 'B'], dtype=object)

2、选择多列

# 选择多列
df[['name','Q1']].head(6)

在这里插入图片描述

(四)选择多行多列

1、使用位置索引器iloc

选择行的方法主要基于把 DataFrame 看成二维数组的观点。选择多行多列,使用位置索引器iloc,行列下标的位置上都允许切片和花式索引。

df.iloc[3:5,[0,2]]

在这里插入图片描述

为了使用标签索引,需要先判断name列的取值是否唯一。判断姓名是否有重名。

# df['name'].unique().shape
df['name'].unique().shape==df['name'].shape  
True

发现无重名,则可以把name作为行索引Index

df.set_index('name',inplace=True)
df.head(10)

在这里插入图片描述

2、使用标签索引器loc

选择多行多列,使用标签索引器loc,行列下标的位置上都允许切片和花式索引。

df.loc['Eorge':'Harlie','Q1':'Q4']

在这里插入图片描述

注意:使用切片时,位置索引不包含终值,而标签索引却包含终值。

3、使用ix索引器

也可以用ix索引器,混合使用位置和标签索引,但不建议这样做。

df.ix[3:5,'Q1':'Q4']
C:\Users\Administrator\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: DeprecationWarning: 
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexingSee the documentation here:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated

在这里插入图片描述

二、带条件筛选

(一)startswith()方法

1、选择 DataFrame df中索引值以字母'A'开头的所有行,并选择'team'列:

# 带条件筛选
df.loc[df.index.str.startswith('A'),'team']

在这里插入图片描述

2、选择 DataFrame df中索引值以字母 ‘A’ 开头的所有行,并选择所有列:

# loc中使用函数筛选满足条件的行
df.loc[lambda x:x.name.str.startswith('A'),:]

将整个 DataFrame 对象作为实参传递给形参x,注意x的行索引是整数。

在这里插入图片描述

(二)mean()方法

比较 DataFrame 中列'Q1'的每个元素是否大于或等于'Q1'列的平均值:

df['Q1']>=df['Q1'].mean()

它的返回结果将是一个布尔类型的 Series,其中每个元素对应于相应的 ‘Q1’ 列元素是否大于或等于 ‘Q1’ 列的平均值。

0      True
1     False
2      True
3      True
4      True
5     False
6      True
7     False
8      True
9      True
10    False
11    False
12     True
13     True
14     True
15    False
16     True
17     True
18     True
19     True
20     True
21     True
22    False
23     True
24     True
25     True
26     True
27     True
28     True
29    False...  
70     True
71     True
72    False
73    False
74     True
75     True
76     True
77     True
78    False
79     True
80     True
81    False
82    False
83     True
84     True
85    False
86    False
87    False
88     True
89    False
90    False
91     True
92     True
93    False
94    False
95    False
96    False
97     True
98    False
99    False
Name: Q1, Length: 100, dtype: bool

(三)columns属性

获取 DataFrame 中倒数第四列及其后面的所有列的列名:

df.columns[-4:]

df.columns返回一个包含 DataFrame 中所有列名的 Index 对象。通过索引-4:,获取了倒数第四列及其后面的所有列的列名。

Index(['Q1', 'Q2', 'Q3', 'Q4'], dtype='object')

(四)apply()方法

使用apply()函数,它会对 DataFrame 的每一列应用指定的函数。

df1 = df.apply(lambda x: np.sum(x) if x.name.startswith('Q') else print(x.name))  #默认一次处理一列
df1
  • 对于以 ‘Q’ 开头的列,lambda x: np.sum(x)函数会计算该列的总和。
  • 对于其他列,print(x.name)函数会打印列的名称。

然而,需要注意的是,apply()函数返回的是一个 Series,其中包含每一列的处理结果。这意味着,对于那些不以 ‘Q’ 开头的列,由于print(x.name)函数没有返回值,因此相应位置的结果会是 NaN。另外,可能想要使用axis=0参数来指定apply()函数按列而不是按行进行操作。

在这里插入图片描述

(五)copy()方法

df2 = df.copy()
df2

首先通过df.copy()创建了 DataFrame df的副本df2。这样做是为了避免在对df2进行操作时影响到原始的 DataFrame df

副本df2与原始的 DataFrame df具有相同的数据和结构,但它们是独立的对象,对其中一个对象的操作不会影响另一个对象。因此,通过这样的方式可以安全地对df2进行任何需要的修改或处理。

在这里插入图片描述

对 DataFrame df2中的每一行,从 ‘Q1’ 到 ‘Q4’ 列的值进行求和:

df2.apply(lambda x:sum(x['Q1':'Q4']),axis=1)  # 一次处理一行

使用了apply()函数,对 DataFrame 中的每一行进行操作。

其中lambda x: sum(x['Q1':'Q4'])表示对每一行从 ‘Q1’ 到 ‘Q4’ 列进行求和操作。而axis=1参数指定了按行操作。

因此,该代码将会对 DataFrame df2中的每一行,从 ‘Q1’ 到 ‘Q4’ 列的值进行求和,并返回一个包含每一行求和结果的 Series。

name
Liver       198
Arry        167
Ack         219
Eorge       338
Oah         261
Harlie      167
Acob        258
Lfie        155
Reddie      286
Oscar       179
Leo         133
Logan       198
Archie      299
Theo        251
Thomas      225
James       188
Joshua      177
Henry       198
William     177
Max         216
Lucas       240
Ethan       301
Arthur      179
Mason       251
Isaac       190
Harrison    195
Teddy       231
Finley      287
Daniel      233
Riley       203... 
Nathan      239
Blake       203
Luke6       306
Elliot      130
Roman       143
Stanley     276
Dexter      240
Michael     261
Elliott     133
Tyler       198
Ryan        257
Ellis       187
Finn         92
Albert0     181
Kai         172
Liam        131
Calum       203
Louis2      180
Aaron       234
Ezra        219
Leon        136
Connor      209
Grayson7    250
Jamie0      275
Aiden       181
Gabriel     268
Austin7     125
Lincoln4    212
Eli         234
Ben         179
Length: 100, dtype: int64

(六)groupby()方法

1、将 DataFrame 按照'team'列进行分组,并对每个分组应用了一个函数:

df.groupby('team').apply(lambda x :print(x))

这段代码使用了groupby()函数将 DataFrame 按照'team'列进行分组,并对每个分组应用了一个函数。

在这个例子中,使用了一个lambda函数,它接受每个分组作为输入,并将其打印出来。print(x)语句会打印每个分组的内容。

请注意,这段代码在每个分组中都会打印出该分组的内容,而不会返回任何值。

        team  Q1  Q2  Q3  Q4
name                        
Ack        A  57  60  18  84
Lfie       A   9  10  99  37
Oscar      A  77   9  26  67
Joshua     A  63   4  80  30
Henry      A  91  15  75  17
Lucas      A  60  41  77  62
Arthur     A  44  53  42  40
Reggie1    A  30  12  23   9
Toby       A  52  27  17  68
Dylan      A  86  87  65  20
Hugo0      A  28  25  14  71
Caleb      A  64  34  46  88
Nathan     A  87  77  62  13
Blake      A  78  23  93   9
Stanley    A  69  71  39  97
Tyler      A  75  16  44  63
Aaron      A  96  75  55   8team  Q1  Q2  Q3  Q4
name                        
Ack        A  57  60  18  84
Lfie       A   9  10  99  37
Oscar      A  77   9  26  67
Joshua     A  63   4  80  30
Henry      A  91  15  75  17
Lucas      A  60  41  77  62
Arthur     A  44  53  42  40
Reggie1    A  30  12  23   9
Toby       A  52  27  17  68
Dylan      A  86  87  65  20
Hugo0      A  28  25  14  71
Caleb      A  64  34  46  88
Nathan     A  87  77  62  13
Blake      A  78  23  93   9
Stanley    A  69  71  39  97
Tyler      A  75  16  44  63
Aaron      A  96  75  55   8team  Q1  Q2  Q3  Q4
name                         
Acob        B  61  95  94   8
Leo         B  17   4  33  79
Logan       B   9  89  35  65
Thomas      B  80  48  56  41
Harrison    B  89  13  18  75
Edward      B  57  38  86  87
Samuel      B   9  38  88  66
Elijah      B  97  89  15  46
Harley      B   2  99  12  13
Jenson      B  66  77  88  74
Frankie     B  18  62  52  33
David       B  21  47  99   2
Lewis       B   4  34  77  28
Ronnie      B  53  13  34  99
Harvey2     B  43  76  87  90
Michael     B  89  21  59  92
Elliott     B   9  31  33  60
Albert0     B  85  38  41  17
Kai         B  66  45  13  48
Liam        B   2  80  24  25
Grayson7    B  59  84  74  33
Jamie0      B  39  97  84  55team  Q1  Q2  Q3  Q4
name                          
Arry         C  36  37  37  57
Eorge        C  93  96  71  78
Harlie       C  24  13  87  43
Archie       C  83  89  59  68
Theo         C  51  86  87  27
William      C  80  68   3  26
Daniel       C  50  50  72  61
Alexander    C  91  76  26  79
Adam         C  90  32  47  39
Sebastian    C   1  14  68  48
Tommy        C  29  44  28  76
Jake3        C  69  23  11  40
Ollie3       C  10  76  30  36
Matthew      C  44  33  41  98
Elliot       C  15  17  76  22
Ellis        C  34  34  77  42
Calum        C  14  91  16  82
Louis2       C  13  94  51  22
Connor       C  62  38  63  46
Gabriel      C  48  59  87  74
Austin7      C  21  31  30  43
Lincoln4     C  98  93   1  20team  Q1  Q2  Q3  Q4
name                          
Oah          D  65  49  61  86
Reddie       D  64  93  57  72
Ethan        D  79  45  89  88
Mason        D  80  96  26  49
Finley       D  62  73  84  68
Benjamin     D  15  88  52  25
Louie        D  24  84  54  11
Carter7      D  57  52  77  50
Bobby1       D  50  55  60  59
Albie1       D  79  82  56  96
Luca         D   5  40  91  83
Alex         D  14  70  55  87
Reuben       D  70  72  76  56
Jayden6      D  64  21  10  21
Hunter3      D  38  80  82  40
Theodore3    D  43   7  68  80
Luke6        D  15  97  95  99
Ezra         D  16  56  86  61
Aiden        D  20  31  62  68team  Q1  Q2  Q3  Q4
name                         
Liver       E  89  21  24  64
James       E  48  77  52  11
Max         E  97  75  41   3
Isaac       E  74  23  28  65
Teddy       E  71  91  21  48
Riley       E  35  26  59  83
Joseph      E  67  87  87  93
Jaxon       E  88  98  19  98
Arlo8       E  48  34  52  51
Jude        E   8  45  13  65
Rory9       E   8  12  58  27
Zachary     E  12  71  85  93
Jackson5    E   6  10  15  33
Roman       E  73   1  25  44
Dexter      E  73  94  53  20
Ryan        E  92  70  64  31
Finn        E   4   1  55  32
Leon        E  38  60  31   7
Eli         E  11  74  58  91
Ben         E  21  43  41  74

2、使用 NumPy 的np.max()函数计算每个分组中的最大值:

df.groupby('team').apply(lambda x :np.max(x))  # 一次传一组

结果是一个包含每个分组最大值的 DataFrame。

在这里插入图片描述

3、返回一个包含每个分组中 ‘Q1’ 和 ‘Q4’ 列的最大值:

df.groupby('team')['Q1','Q4'].apply(max)

对 DataFrame df根据 ‘team’ 列进行分组,然后对每个分组中的 ‘Q1’ 和 ‘Q4’ 列应用了max()函数,以找到每个组中 ‘Q1’ 和 ‘Q4’ 列的最大值。

如果 ‘Q1’ 和 ‘Q4’ 列中包含数值数据,那么该操作将返回一个包含每个分组中 ‘Q1’ 和 ‘Q4’ 列的最大值的 Series 对象。

在这里插入图片描述

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

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

相关文章

本地运行github上下载的项目--接Git入门篇

1.了解项目 这是一个基于Spring Boot 和 Mybatis Plus 构建的Java项目,很经典的外卖项目,参考b站的黑马瑞吉外卖。 2.构建项目 SpringBoot项目,首先下载一些常见的项目要求的组件。然后配置如下: 看README,在阅读该…

如何查找局域网内连接设备的IP地址?

如何查找局域网内连接设备的IP地址? 第一种方法:通过CMD指令 在电脑开始菜单中找到运行,点击打开,输入CMD,然后回车,如下图所示, 如下图所示,输入ipconfig/all,然后回车, 如下图所示,此时会扫描出所有的连接设备的IP地址、MAC地址以及网关等信息, 这时候在cmd命令窗…

设置浏览器声音外放,其他声音耳机里放

需求描述: 我想在耳机里听歌,浏览器里的声音外放 找到这个面板 让浏览器的声音输出设为,扬声器

超图打开不同格式的dem文件

dem,数字高程模型; dem文件的后缀是什么? 有*.dem格式的,也有Raster,ASCII和Tiff类型的。Raster类型的是一个raster文件夹里面有很多不同格式的文件共同组成了DEM文件的内容。ASCII类型的是个txt文件。Tiff类型的也是一个文件夹…

Learning Discriminative Representations for Skeleton Based Action Recognition

标题:基于骨架的动作识别的学习判别性表示 原文链接:Learning Discriminative Representations for Skeleton Based Action Recognition (thecvf.com) 源码链接:https://github.com/zhysora/FR-Head 发表:CVPR 摘要 最近&…

面试题:MySQL 优化篇

定位慢查询 💖 开源工具 调试工具:Arthas(阿尔萨斯)运维工具:Prometheus(普罗米修斯)、Skywalking 💖 MySQL 慢查询日志 # 开启 MySQL 慢查询日志开关 slow_query_log1 # 设置慢…

k8s入门到实战(七)—— 回顾:使用yaml文件配置pv、pvc、configmap部署mysql服务

实战:部署 mysql 服务 回顾加深 pv、pvc、configmap 删除所有 deployment、pv、pvc、configmap、StorageClass创建一个 nsf 挂载目录给 mysql mkdir -p /nfs/data/mysql创建 yaml 文件mysql-server.yaml # 创建pv apiVersion: v1 kind: PersistentVolume metadat…

黑马鸿蒙笔记 3

目录 11.ArkUI组件-Column和Row 12.ArkUI组件-循环控制 13.ArkUI组件-List 14.ArkUI组件-自定义组件 15.ArkUI组件-状态管理State装饰器 16.ArkUI组件-状态管理-任务统计案例 17.ArkUI组件-状态管理-PropLinkProvideConsume 11.ArkUI组件-Column和Row Colum和Row的交叉…

QT-飞机水平仪图标

QT-飞机水平仪图标 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include <stdio.h> #include <stdlib.h> #include <string.h>#include <QtCore> #include <QtGui> #include <QDebug> #include <QTableWidget&g…

Oracle Solaris 11.3开工失败问题处理记录

1、故障现像 起初是我这有套RAC有点问题&#xff0c;我想重启1个节点&#xff0c;结果发现重启后该节点的IP能PING通&#xff0c;但SSH连不上去&#xff0c;对应的RAC服务也没有自动启动。 操作系统是solaris 11.3。由于该IP对应的主机是LDOM&#xff0c;于是我去主域上telnet…

【BlossomRPC】接入注册中心

文章目录 NacosZookeeper自研配置中心 RPC项目 配置中心项目 网关项目 这是BlossomRPC项目的最后一篇文章了&#xff0c;接入完毕注册中心&#xff0c;一个完整的RPC框架就设计完成了。 对于项目对注册中心的整合&#xff0c;其实我们只需要再服务启动的时候将ip/port/servic…

Qt6.6添加多媒体模块Multimedia报错问题

问题 QT包含多媒体模块Multimedia时提示未知的模块&#xff1a; error: Project ERROR: Unknown module(s) in QT: multimedia 在帮助文档中只可以找到QMediaPlayer类&#xff0c;但是点进去是空的&#xff0c;这是因为没有安装多媒体模块及对应的帮助文档。 解决 使用在线…

● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

● 435. 无重叠区间 class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:if len(intervals)1:return 0intervalssorted(intervals,keylambda x:(x[0],x[1]))res0for i in range(1,len(intervals)):if intervals[i][0]<intervals[i-1][…

代码随想录算法训练营第41天|343. 整数拆分 |96.不同的二叉搜索树

代码随想录算法训练营第41天|343. 整数拆分 |96.不同的二叉搜索树 详细布置 今天两题都挺有难度&#xff0c;建议大家思考一下没思路&#xff0c;直接看题解&#xff0c;第一次做&#xff0c;硬想很难想出来。 343. 整数拆分 https://programmercarl.com/0343.%E6%95%B4%E6%…

【Go】十三、面向对象:方法

文章目录 1、面向对象2、结构体实例的创建3、结构体之间的转换4、方法5、结构体值拷贝6、方法的注意点7、方法和函数的区别8、跨包创建结构体实例 1、面向对象 Go的结构体struct ⇒ Java的Class类Go基于struct来实现OOP相比Java&#xff0c;Go去掉了方法重载、构造函数和析构函…

css- 4

1.浮动 1. 浮动最初用于实现文字环绕效果 2. 现在&#xff0c;浮动是主流的布局方式之一 1.1元素浮动之后的特点 元素浮动之后&#xff0c;称为浮动元素&#xff0c;具有如下特点&#xff1a; 1. 浮动元素脱离文档流 2. 多个浮动的元素会水平排列&#xff0c;一行放不下自动换…

Redis高级面试题-2024

说说你对Redis的理解 Redis是一个基于Key-Value存储结构的开源内存数据库&#xff0c;也是一种NoSQL数据库。 它支持多种数据类型&#xff0c;包括String、Map、Set、ZSet和List&#xff0c;以满足不同应用场景的需求。 Redis以内存存储和优化的数据结构为基础&#xff0c;提…

chatglm.cpp编译与执行

ChatGLM3介绍 ChatGLM3是由智谱AI和清华大学KEG实验室联合发布的对话预训练模型。作为第三代大型语言模型&#xff0c;ChatGLM3不仅理解和生成人类语言&#xff0c;还能执行代码、调用工具&#xff0c;并以markdown格式进行响应。其目标是打造更智能、更安全的代码解释器和工具…

【力扣一刷】代码随想录day27(39. 组合总和、40.组合总和II、131.分割回文串)

目录 【39. 组合总和】中等题 【40.组合总和II】中等题 【131. 分割回文串】中等题 【39. 组合总和】中等题 思路&#xff1a; 确定终止条件&#xff1a;sum target时记录路径并返回。剪枝&#xff1a;当前节点的路径之和已经大于sum就不可能再等于sum了&#xff0c;结束该分支…

16进制的字符串转byte[]数组 以及将字节数组转换成十六进制的字符串

16进制的字符串转byte[]数组 public class ClientString16 {@Testpublic void get16Str(){String str="48 47 12 00 14 12 16 08 15 0d 30 0f 02 30 30 30 30 30 30 30 30 30 30 00 c2";byte[] bytes = hexStringToByteArray(str);getBytetoString(bytes);//String …