【100天精通Python】Day55:Python 数据分析_Pandas数据选取和常用操作

目录

Pandas数据选择和操作

1 选择列和行

2 过滤数据

3 添加、删除和修改数据

 4 数据排序


Pandas数据选择和操作

        Pandas是一个Python库,用于数据分析和操作,提供了丰富的功能来选择、过滤、添加、删除和修改数据。

1 选择列和行

Pandas 提供了多种方式来选择行和列,这取决于您希望获取的数据的类型和结构。

1.1 选择列

(1)使用列标签

使用列标签来选择一个或多个列。您可以将列标签传递给 DataFrame 的索引器,例如 []

(2)使用 .loc[] 方法

.loc[] 方法可以根据标签名称选择行和列。对于列选择,可以使用 : 选择所有行。

1.2 选择行

(1)使用行索引

使用行索引来选择一个或多个行。您可以使用 .loc[] 方法或 .iloc[] 方法。

(2)使用 .iloc[] 方法

.iloc[] 方法使用整数位置来选择行和列。它与 .loc[] 方法的不同之处在于,它使用整数索引而不是标签。

示例代码:

import pandas as pddata = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)# 选择单个列
column_A = df['A']
print("单个列 'A':\n", column_A)
# 结果:
# 单个列 'A':
# 0    1
# 1    2
# 2    3
# Name: A, dtype: int64# 选择多个列
columns_AB = df[['A', 'B']]
print("多个列 'A' 和 'B':\n", columns_AB)
# 结果:
# 多个列 'A' 和 'B':
#    A  B
# 0  1  4
# 1  2  5
# 2  3  6# 使用 .loc[] 选择列
column_A_loc = df.loc[:, 'A']
print("使用 .loc[] 选择列 'A':\n", column_A_loc)
# 结果:
# 使用 .loc[] 选择列 'A':
# 0    1
# 1    2
# 2    3
# Name: A, dtype: int64# 选择多个列
columns_AB_loc = df.loc[:, ['A', 'B']]
print("使用 .loc[] 选择多个列 'A' 和 'B':\n", columns_AB_loc)
# 结果:
# 使用 .loc[] 选择多个列 'A' 和 'B':
#    A  B
# 0  1  4
# 1  2  5
# 2  3  6# 使用 .loc[] 选择单个行
row_0_loc = df.loc[0]
print("使用 .loc[] 选择单个行 (索引 0):\n", row_0_loc)
# 结果:
# 使用 .loc[] 选择单个行 (索引 0):
# A    1
# B    4
# C    7
# Name: 0, dtype: int64# 使用 .loc[] 选择多个行
rows_01_loc = df.loc[0:1]
print("使用 .loc[] 选择多个行 (索引 0 到 1):\n", rows_01_loc)
# 结果:
# 使用 .loc[] 选择多个行 (索引 0 到 1):
#    A  B  C
# 0  1  4  7
# 1  2  5  8# 使用 .iloc[] 选择单个行
row_0_iloc = df.iloc[0]
print("使用 .iloc[] 选择单个行 (整数位置 0):\n", row_0_iloc)
# 结果:
# 使用 .iloc[] 选择单个行 (整数位置 0):
# A    1
# B    4
# C    7
# Name: 0, dtype: int64# 使用 .iloc[] 选择多个行
rows_01_iloc = df.iloc[0:2]
print("使用 .iloc[] 选择多个行 (整数位置 0 到 1):\n", rows_01_iloc)
# 结果:
# 使用 .iloc[] 选择多个行 (整数位置 0 到 1):
#    A  B  C
# 0  1  4  7
# 1  2  5  8# 混合选择行和列
subset = df.loc[0:1, ['A', 'B']]
print("选择特定的行和列:\n", subset)
# 结果:
# 选择特定的行和列:
#    A  B
# 0  1  4
# 1  2  5

2 过滤数据

        在Pandas中,您可以使用不同的方法来过滤数据,根据特定条件筛选出满足条件的数据。以下是一些过滤数据的示例和方法:

2.1 基于条件的过滤

通过创建一个条件表达式,您可以选择DataFrame中满足条件的行。

import pandas as pddata = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)# 选择满足条件的行,例如 'A' 列大于 3 的行
filtered_data = df[df['A'] > 3]
print(filtered_data)

输出结果:

   A   B
3  4  40
4  5  50

2.2 使用多个条件

您可以组合多个条件,使用 &(与)和 |(或)等逻辑运算符。

# 选择同时满足多个条件的行,例如 'A' 列大于 2 且 'B' 列小于 30 的行
filtered_data = df[(df['A'] > 2) & (df['B'] < 30)]
print(filtered_data)

输出结果:

   A   B
2  3  30

2.3 使用 isin() 进行筛选

您可以使用 isin() 方法来筛选出匹配指定值的行。

# 选择 'A' 列中匹配特定值的行
filtered_data = df[df['A'].isin([2, 4])]
print(filtered_data)

 输出结果:

   A   B
1  2  20
3  4  40

2.4 使用字符串方法

如果您的数据包含字符串列,您可以使用字符串方法进行过滤。

data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],'Age': [25, 30, 35, 40]}
df = pd.DataFrame(data)# 选择包含特定字符串的行
filtered_data = df[df['Name'].str.contains('b', case=False)]
print(filtered_data)

输出结果:

   Name  Age
1   Bob   30

3 添加、删除和修改数据

3.1 添加数据

(1)添加行

        要向 DataFrame 添加新行,通常可以创建一个新的数据项,然后将其附加到 DataFrame。这可以使用 append 方法来完成。确保设置 ignore_index=True 来重置索引。

(2)添加列

        要添加新列,只需分配一个新的列名并提供相应的数据。这样可以在 DataFrame 中增加新的列,以便存储额外的信息。

3.2 删除数据

(1)删除行

        使用 drop 方法可以删除指定的行。您可以指定要删除的行的索引或标签,并使用 axis=0 参数来表示删除行。

(2)删除列

        要删除列,使用 drop 方法并设置 axis=1 参数,然后指定要删除的列名。这将允许您从 DataFrame 中移除不需要的列。

3.3 修改数据

(1)修改特定单元格的值

        要修改 DataFrame 中特定单元格的值,您可以使用 .loc[] 方法,通过指定行和列的标签或索引,来更新该单元格的值。

(2)更新多个值

        要批量更新数据,通常可以使用条件来选择要更新的行,然后赋予新的值。这可以帮助您一次性更新多个数据点,而不必一个一个手动修改。

3.4 代码示例

import pandas as pd# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],'Age': [25, 30, 35]}
df = pd.DataFrame(data)# 添加新行
new_row = pd.Series({'Name': 'David', 'Age': 40})
df = df.append(new_row, ignore_index=True)
# 结果: 
#    Name  Age
# 0  Alice   25
# 1    Bob   30
# 2 Charlie   35
# 3  David   40# 添加新列
df['City'] = ['New York', 'Los Angeles', 'Chicago', 'Houston']
# 结果: 
#    Name  Age         City
# 0  Alice   25     New York
# 1    Bob   30  Los Angeles
# 2 Charlie   35      Chicago
# 3  David   40      Houston# 删除行
df = df.drop(2)  # 删除索引为2的行
# 结果: 
#    Name  Age         City
# 0  Alice   25     New York
# 1    Bob   30  Los Angeles
# 3  David   40      Houston# 删除列
df = df.drop('City', axis=1)  # 删除名为 'City' 的列
# 结果: 
#    Name  Age
# 0  Alice   25
# 1    Bob   30
# 3  David   40# 修改特定单元格的值
df.loc[1, 'Age'] = 31
# 结果: 
#    Name  Age
# 0  Alice   25
# 1    Bob   31
# 3  David   40# 更新多个值
df.loc[df['Age'] > 30, 'Age'] = 32  # 更新年龄大于30的行的年龄为32
# 结果: 
#    Name  Age
# 0  Alice   25
# 1    Bob   32
# 3  David   32# 输出最终结果
print(df)

 4 数据排序

        在 Pandas 中,您可以使用 sort_values() 方法对 DataFrame 中的数据进行排序。以下是有关如何进行列排序、包括升序和降序排序,以及如何按多列进行排序。

4.1  按列排序

要按列对数据进行排序,首先选择要排序的列名称,并使用 sort_values() 方法进行操作。默认情况下,数据将按升序排序。

  • 升序排序:使用 sort_values(by='列名'),其中 '列名' 是您要排序的列的名称。例如,df.sort_values(by='Age') 将按 'Age' 列的升序进行排序。

  • 降序排序:要按降序排序,可以使用 sort_values(by='列名', ascending=False),其中 '列名' 是您要排序的列的名称。例如,df.sort_values(by='Age', ascending=False) 将按 'Age' 列的降序进行排序。

4.2 按多列排序

        如果需要按多列进行排序,您可以通过提供列名称的列表来实现。首先,按列表中的第一个列名进行排序,然后按照列表中的下一个列名进行排序。

        例如,要按 'City' 列升序排序,然后按 'Age' 列升序排序,您可以使用 sort_values(by=['City', 'Age'])

4.3 重置索引

        请注意,排序后的 DataFrame 可能会保留之前的索引顺序。如果希望重新设置索引以匹配新的排序顺序,可以使用 reset_index(drop=True) 方法来删除旧的索引并创建一个新的整数索引。

4.4 代码示例 

import pandas as pd# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],'Age': [25, 30, 35, 40],'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']}
df = pd.DataFrame(data)# 按列排序
# 默认按升序排序
df_sorted = df.sort_values(by='Age')
# 按照 'Age' 列的升序排序
print("按 'Age' 列的升序排序:\n", df_sorted)# 按照 'Age' 列的降序排序
df_sorted_desc = df.sort_values(by='Age', ascending=False)
print("\n按 'Age' 列的降序排序:\n", df_sorted_desc)# 按多列排序
# 先按 'City' 列升序排序,再按 'Age' 列升序排序
df_multi_sorted = df.sort_values(by=['City', 'Age'])
print("\n按 'City' 列和 'Age' 列的升序排序:\n", df_multi_sorted)# 恢复索引
df_multi_sorted = df_multi_sorted.reset_index(drop=True)
print("\n重置索引后的 DataFrame:\n", df_multi_sorted)

 这个示例演示了如何在 Pandas 中按列对数据进行排序,包括升序和降序排序以及按多列排序。您还可以使用 reset_index() 方法来重置排序后的 DataFrame 的索引。

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

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

相关文章

学习Bootstrap 5的第六天

目录 信息警告框 警告框 实例 警告框链接 实例 关闭警告框 实例 警告框动画 实例 按钮 按钮样式 实例 按钮轮廓 实例 ​编辑按钮尺寸 实例 块级按钮 实例 实例 活动/禁用按钮 实例 加载器按钮 实例 扩展小知识 信息警告框 警告框 警告框是使用 .aler…

ETCD详解

一、etcd概念 ETCD 是一个高可用的分布式键值key-value数据库&#xff0c;可用于服务发现。 ETCD 采用raft 一致性算法&#xff0c;基于 Go语言实现。 etcd作为一个高可用键值存储系统&#xff0c;天生就是为集群化而设计的。由于Raft算法在做决策时需要多数节点的投票&…

【算法】归并排序 详解

归并排序 详解 归并排序代码实现1. 递归版本2. 非递归版本 排序&#xff1a; 排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a; 假定在待排序的记录序列中&#xff0c;存在多个具有相…

eclipse进入断点之后,一直卡死,线程一直在运行【记录一种情况】

问题描述: 一直卡死在某个断点处&#xff0c;取消断点也是卡死在这边的进程处。 解决方式&#xff1a; 将JDK的使用内存进行了修改 ① 打开eclipse&#xff0c;window->preference->Java->Installed JREs&#xff0c;选中使用的jdk然后点击右侧的edit&#xff0c;在…

【算法】插入排序

插入排序 插入排序代码实现代码优化 排序&#xff1a; 排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a; 假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&…

npm/yarn link 测试包时报错 Warning: Invalid hook call. Hooks can only be called ...

使用 dumi 开发 React 组件库时&#xff0c;为避免每次修改都发布到 npm&#xff0c;需要在本地的测试项目中使用 npm link 为组件库建立软连接&#xff0c;方便本地调试。 结果在本地测试项目使用 $ npm link 组件库 后&#xff0c;使用内部组件确报错&#xff1a; react.dev…

“安全即服务”为网络安全推开一道门

8月30日&#xff0c;三六零&#xff08;下称“360”&#xff09;集团发布了2023年半年报&#xff0c;其中安全业务第二季度收入6.54亿元&#xff0c;同比增长98.76%&#xff0c;环比增长157.16%&#xff0c;安全第二增长曲线已完全成型&#xff01;特别值得一提的是&#xff0c…

高速路自动驾驶功能HWP功能定义

一、功能定义 高速路自动驾驶功能HWP是指在一般畅通高速公路或城市快速路上驾驶员可以放开双手双脚&#xff0c;同时注意力可在较长时间内从驾驶环境中转移&#xff0c;做一些诸如看手机、接电话、看风景等活动&#xff0c;该系统最低工作速度为60kph。 如上两种不同环境和速度…

Vue+NodeJS+MongoDB实现邮箱验证注册、登录

一.主要内容 邮件发送用户注册用户信息存储到数据库用户登录密码加密JWT生成tokenCookie实现快速登录 在用户注册时,先发送邮件得到验证码.后端将验证进行缓存比对,如果验证码到期,比对不正确,拒绝登录;如果比对正确,将用户的信息进行加密存储到数据库. 用户登录时,先通过用…

LRTimelapse 6 for Mac(延时摄影视频制作软件)

LRTimelapse 是一款适用于macOS 系统的延时摄影视频制作软件&#xff0c;可以帮助用户创建高质量的延时摄影视频。该软件提供了直观的界面和丰富的功能&#xff0c;支持多种时间轴摄影工具和文件格式&#xff0c;并具有高度的可定制性和扩展性。 LRTimelapse 的主要特点如下&am…

Leetcode刷题笔记--Hot41-50

1--二叉树的层序遍历&#xff08;102&#xff09; 主要思路&#xff1a; 经典广度优先搜索&#xff0c;基于队列&#xff1b; 对于本题需要将同一层的节点放在一个数组中&#xff0c;因此遍历的时候需要用一个变量 nums 来记录当前层的节点数&#xff0c;即 nums 等于队列元素的…

全网独家:编译CentOS6.10系统的openssl-1.1.1多版本并存的rpm安装包

CentOS6.10系统原生的openssl版本太老&#xff0c;1.0.1e&#xff0c;不能满足一些新版本应用软件的要求&#xff0c;但是它又被wget、mysql-libs、python-2.6.6、yum等一众系统包所依赖&#xff0c;不能再做升级。故需考虑在不影响系统原生openssl的情况下&#xff0c;安装较新…

HarmonyOS/OpenHarmony(Stage模型)应用开发单一手势(三)

五、旋转手势&#xff08;RotationGesture&#xff09; RotationGesture(value?:{fingers?:number; angle?:number}) 旋转手势用于触发旋转手势事件&#xff0c;触发旋转手势的最少手指数量为2指&#xff0c;最大为5指&#xff0c;最小改变度数为1度&#xff0c;拥有两个可…

mac安装adobe需要注意的tips(含win+mac all安装包)

M2芯片只能安装2022年以后的&#xff08;包含2022年的&#xff09; 1、必须操作的开启“任何来源” “任何来源“设置&#xff0c;这是为了系统安全性&#xff0c;苹果希望所有的软件都从商店或是能验证的官方下载&#xff0c;导致默认不允许从第三方下载应用程序。macOS sie…

力扣(LeetCode)算法_C++——寻找重复的子树

给你一棵二叉树的根节点 root &#xff0c;返回所有 重复的子树 。 对于同一类的重复子树&#xff0c;你只需要返回其中任意 一棵 的根结点即可。 如果两棵树具有 相同的结构 和 相同的结点值 &#xff0c;则认为二者是 重复 的。 示例 1&#xff1a; 输入&#xff1a;root…

智能合约安全分析,Vyper 重入锁漏洞全路径分析

智能合约安全分析&#xff0c;Vyper 重入锁漏洞全路径分析 事件背景 7 月 30 日 21:10 至 7 月 31 日 06:00 链上发生大规模攻击事件&#xff0c;导致多个 Curve 池的资金损失。漏洞的根源都是由于特定版本的 Vyper 中出现的重入锁故障。 攻击分析 通过对链上交易数据初步分…

Ubutnu允许ssh连接使用root与密码登录

文章目录 1. 修改sshd_config2. 设置root密码3. 重启SSH服务 1. 修改sshd_config 修改/etc/ssh/sshd_config文件&#xff0c;找到 #Authentication&#xff0c;将 PermitRootLogin 参数修改为 yes。如果 PermitRootLogin 参数被注释&#xff0c;请去掉首行的注释符号&#xff…

机器学习:基于梯度下降算法的逻辑回归实现和原理解析

这里写目录标题 什么是逻辑回归&#xff1f;Sigmoid函数逻辑回归损失函数梯度下降 逻辑回归定义逻辑函数线性组合模型训练决策边界 了解逻辑回归&#xff1a;从原理到实现什么是逻辑回归&#xff1f;逻辑回归的原理逻辑回归的实现逻辑回归的应用代码示例算法可视化 当涉及到二元…

01_TMS320F28004x系列MCU介绍和资料搜集

1. TI C2000 实时微控制器 TI公司在处理器方面的产品线有&#xff1a;基于ARM内核的微控制器/微处理器、MSP430微控制器、C2000系列实时微控制器、还有数字信号处理器&#xff08;DSP&#xff09;。 其中&#xff0c;C2000是TI公司专门针对实时控制推出的32位微控制器。TI公司…

SpingBoot整合Sa-Token框架(1)

一、文档参考&#xff1a;框架介绍 (sa-token.cc) 框架生态——开源项目 (sa-token.cc) 二、与SpingBoot整合 1、创建项目 在 IDE 中新建一个 SpringBoot 项目&#xff0c;例如&#xff1a;sa-token-demo-springboot&#xff08;不会的同学请自行百度或者参考&#xff1a;Sp…