0Pricing
Python Academy · 课时

索引、筛选与布尔掩码

使用 loc、iloc 和布尔条件选择行与列。

索引、筛选与布尔掩码 是 CoddyKit 上的免费 Python Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。

loc 与 iloc

loc 按标签选择,iloc 按整数位置选择。不要混淆二者。

import pandas as pd

df = pd.DataFrame({"a":[1,2,3],"b":[4,5,6]}, index=["x","y","z"])
print(df.loc["y"])       # row with label y
print(df.iloc[1])        # row at position 1 (same row)
print(df.loc["x":"y"])   # rows x to y inclusive

布尔掩码筛选

创建一个布尔 Series,并使用它选择行。这相当于 pandas 中的 NumPy 布尔索引。

import pandas as pd

df = pd.DataFrame({"name":["Alice","Bob","Carol"],"age":[30,17,25]})
adults = df[df["age"] >= 18]
print(adults)
# Alice 30
# Carol 25

多个条件

使用 &(与)和 |(或)组合布尔条件。请将每个条件放在括号中。

import pandas as pd

df = pd.DataFrame({"city":["NY","LA","NY","LA"],"score":[80,90,70,85]})
result = df[(df["city"]=="NY") & (df["score"]>75)]
print(result)

query() 方法

df.query("expression") 接受字符串表达式,通常比布尔掩码更易读。

import pandas as pd

df = pd.DataFrame({"age":[30,17,25],"score":[90,80,70]})
result = df.query("age >= 18 and score > 75")
print(result)

isin() 筛选

isin(list) 会筛选出列值属于给定列表的行。

import pandas as pd

df = pd.DataFrame({"city":["NY","LA","Chicago","NY"],"val":[1,2,3,4]})
print(df[df["city"].isin(["NY","LA"])])
# rows with NY or LA

使用 between() 进行范围筛选

series.between(left, right) 对位于 [left, right] 范围内的值返回 True,默认包含边界。

import pandas as pd

df = pd.DataFrame({"score":[55,70,85,95,40]})
print(df[df["score"].between(60, 90)])
# 70 and 85

使用 loc 赋值

进行原地赋值时,请始终使用 loc/iloc,以避免出现 SettingWithCopyWarning。

import pandas as pd

df = pd.DataFrame({"val":[1,2,3,4]})
df.loc[df["val"] > 2, "val"] = 99
print(df)
# 0:1  1:2  2:99  3:99

使用 at 和 iat 访问单个值

at[label, col] 和 iat[i, j] 提供快速的标量访问;访问单个值时比 loc/iloc 更快。

import pandas as pd

df = pd.DataFrame({"a":[10,20],"b":[30,40]})
print(df.at[0,"a"])    # 10  (by label)
print(df.iat[1,1])     # 40  (by position)

按数据类型选择

select_dtypes(include/exclude) 会按照数据类型选择列。

import pandas as pd

df = pd.DataFrame({"x":[1,2],"name":["a","b"],"score":[1.5,2.5]})
nums = df.select_dtypes(include=["number"])
print(nums.columns.tolist())   # ['x', 'score']

删除重复项

drop_duplicates() 会删除重复行。指定 subset 可仅比较特定列。

import pandas as pd

df = pd.DataFrame({"name":["Alice","Bob","Alice"],"age":[30,25,30]})
print(df.drop_duplicates())
# keeps first Alice, removes second

nlargest 和 nsmallest

根据列值高效地选择前 N 行或后 N 行。

import pandas as pd

df = pd.DataFrame({"product":["A","B","C","D"],"sales":[500,300,800,200]})
print(df.nlargest(2,"sales"))
# C 800
# A 500

快速检查

loc 和 iloc 有什么区别?

回顾

使用 loc[label] 按标签选择,使用 iloc[i] 按位置选择。使用 &/| 组合布尔掩码来筛选行。使用 query() 编写易读的筛选条件,使用 isin() 进行成员测试,并始终通过 loc 赋值,以避免出现 SettingWithCopyWarning。

常见问题解答

「索引、筛选与布尔掩码」课时是免费的吗?

是的 — 「索引、筛选与布尔掩码」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。

「索引、筛选与布尔掩码」这节课中我会学到什么?

使用 loc、iloc 和布尔条件选择行与列。 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Python Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「索引、筛选与布尔掩码」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Python Academy 课中编写并运行代码吗?

能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Series 与 DataFrame 基础
  2. 索引、筛选与布尔掩码
  3. GroupBy、聚合与数据透视表
  4. 合并、连接与数据清洗
← 返回 Python Academy