惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
GRAHAM CLULEY
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V2EX - 技术
V2EX - 技术
The Last Watchdog
The Last Watchdog
S
Secure Thoughts
Webroot Blog
Webroot Blog
PCI Perspectives
PCI Perspectives
L
LINUX DO - 最新话题
Hacker News: Ask HN
Hacker News: Ask HN
N
News and Events Feed by Topic
H
Heimdal Security Blog
H
Help Net Security
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
F
Full Disclosure
小众软件
小众软件
S
Securelist
罗磊的独立博客
NISL@THU
NISL@THU
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cisco Blogs
云风的 BLOG
云风的 BLOG
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
Know Your Adversary
Know Your Adversary
S
Schneier on Security
D
DataBreaches.Net
M
MIT News - Artificial intelligence
V
Vulnerabilities – Threatpost
N
News and Events Feed by Topic
有赞技术团队
有赞技术团队
F
Fortinet All Blogs
T
Tenable Blog
The Register - Security
The Register - Security
C
Check Point Blog
AWS News Blog
AWS News Blog
Cloudbric
Cloudbric
C
CXSECURITY Database RSS Feed - CXSecurity.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google Online Security Blog
Google Online Security Blog
博客园 - 叶小钗
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园 - 司徒正美

博客园 - tsembrace

Pandas数据分析教程,由浅入深讲解(五)Pandas IO操作 Pandas数据分析教程,由浅入深讲解(四) Pandas数据分析教程,由浅入深讲解(二) Pandas数据分析教程,由浅入深讲解(一) B站黑马Python+AI零基础入门(二)AI应用-实战 B站黑马Python+AI零基础入门(一)AI应用-基础 B站清华128小时Python高级教程一(C3深入类和对象) B站清华128小时Python高级教程一(C1、C2) B站python入门学习---第二阶段第二章数据库、SQL和MySQL B站python入门学习---第二阶段第一章类和对象 B站python入门学习---第一阶段第十章 数据可视化 B站python入门学习---第一阶段第八~九章 文件操作、异常、模块与包 B站python入门学习---第一阶段前七章回顾复习(二) B站python入门学习---第一阶段前七章回顾复习(一) Python入门学习(十)第十四章其他 Python入门学习(九)Python的高级语法与用法(四)装饰器 Python入门学习(九)Python的高级语法与用法(三)函数式编程 Python入门学习(九)Python的高级语法与用法(二)闭包 Python入门学习(九)Python的高级语法与用法(一)枚举 Python入门学习(八)JSON、反序列化、序列化 Python入门学习(七)高级部分:正则表达式(二) Python入门学习(七)高级部分:正则表达式 Python入门学习(六)高级部分:面向对象 Python入门学习(五)函数 Python入门学习(四)流程控制 包与模块
Pandas数据分析教程,由浅入深讲解(三)
tsembrace · 2026-05-23 · via 博客园 - tsembrace

(四)Pandas对象的访问

1、显式访问:在pandas对象中可以使用标签形式访问数据(可读性高,面向业务端更友好);显式访问loc[],方括号内接收的是标签;这里loc并不是函数(方法),可以理解为pandas提供的一种访问机制。

s.loc[labels]
df.loc[labels]

labels:标签名,标签名列表,BOOL列表(没有标签的,有标签的,也包括条件表达式),切片(可以序号索引切片,也可以标签切片,但标签切片与序号索引切片不同的是左右端头元素都包含的)

import numpy as np
import pandas as pd
arr = np.random.randint(0, 100, size=(5, 6))  # 二维数据
df = pd.DataFrame(data=arr, columns=list("ABCDEF"))
print(df)
# 访问某个元素
# 显式访问某个元素
print(df.loc[2, "C"])  # 行标签为2,列标签为C的元素
# 隐式访问某个元素
print(df.iloc[2, 2])  # 位于行3列3的元素

# 访问某几行/列
# 显式访问某一行/列
print(df.loc[3])  # 访问行索引为3的行
# 访问前两行
print(df.loc[[0,1]])
# 访问列标签为B的列,因为访问B列,所以B列对应各行访问是全访问,通过: 表示全访问
print(df.loc[:,["B"]])
# 访问列标签为B的列,也可以如下明确写为0:4
print(df.loc[0:4,["B"]])
# 访问列标签为B的列,因为访问的就一列,所以可以去除方括号[]
print(df.loc[:,"B"])

# 切片方式访问某几行某几列
# 访问行1到2,列B到E(行列两端都包含)
print(df.loc[1:2,"B":"E"])

# 索引列表方式访问,通过[]设置行、列分别要访问的具体行/列索引列表
print(df.loc[[1,3], ["A", "C", "D"]])  # 访问第1、3行对应ACD列的数据
# 通过布尔值访问方式
# 就是把整个对象中要访问的元素标签设置为True,不访问的设置为Fales
# 布尔值方式访问前两行
print(df.loc[[True, True, False, False, False]])
# 布尔值方式访问1、3行对应的CF列
print(df.loc[[False, True, False, True, False], [False, False, True, False, False, True]])

 2、隐式访问:也可以使用数字序号index的形式访问数据;隐式访问iloc[],方括号内接收的是序号索引。

隐式访问除了是序号索引之外基本与显式访问类似,其中要注意的是切片是左闭右开,而显式索引的切片是两端闭合(都包含)。

3、这里不论是series还是dataframe,都可以使用loc和iloc

4、字典访问:把dataframe当成字典,列索引就是字典的键 

# 字典访问
df = pd.DataFrame(data=np.random.randint(0, 50, size=(3, 4)), index=list("XYZ"), columns=list("ABCD"))
print(df)
print(df["A"])  # 访问列标签为A的列
print(df[["B", "D"]])  # 访问列标签为BD的列
print(df["C"]["X"])  # 访问行标签为X的行,列标签为C的元素

  5、where() 和 mask()

where:满足con条件的保留,其他用other填充;

mask:不满足con条件的保留,其他用other填充;

# 匹配各个元素的条件判断
condition = df > 50
print(condition, type(condition))  # 此时condition是一个DataFrame对象
print(df[condition])  # 这样打印出来的结果就是符合条件的元素,不符合的用NaN填充了
# 如果想用特定的值填充,可以如下
print(df[condition].fillna(200))
# 用where()方法
new_df = df.where(condition)  # 默认用NaN填充
print(new_df)
new_df = df.where(condition, "C")  # 用C填充
print(new_df)

# 行筛选的条件判断
print(df)
condition = df["A"] > 60  # 筛选列标签为A的列中大于60的布尔值列表
print(condition)
print(type(condition))  # 此时condition是一个Series对象,该对象的布尔值对应了A列中各行元素是否满足条件
print(df[condition])  # 筛选出符合condition条件的行
# 用where()方法
new_df = df.where(condition)  # 默认用NaN填充
print(new_df)
new_df = df.where(condition, "ABC")  # 用ABC填充
print(new_df)

mask()的用法与where()类似,只是条件相反。

6、query()方法

df = pd.DataFrame(data=np.random.randint(0,100,size=(5,4)), columns=list("ABCD"))
print(df)
# 找出A列大于60的行
print(df.query("A > 60"))
# 找出A列大于20且B列也大于20的行
print(df.query("A > 20 and B > 20"))
df.loc[1,"B"] = 36
print(df)
# 找出B列中等于36的行
print(df.query("B == 36"))

7、filter()方法

可以用来对行名和列名进行筛选

# 使用filter()方法:只用来筛选行名或列名
df_data = np.random.randint(0,100,size=(5,7))
df_index = ["A1", "A2", "B1", "C1", "C2"]
df_columns = ["X1", "Y1", "Y2", "Y3", "Y4", "Z1", "Z2"]
df = pd.DataFrame(df_data,df_index,df_columns)
print(df)
# 筛选A1,C2行
print(df.filter(items=["A1", "C2"], axis=0))
print("按之前学过的知识,还可以如下使用loc[]:")
print(df.loc[["A1", "C2"]])

# 筛选列标签中包含Y的列
print(df.filter(regex="Y", axis=1))