索引、筛选与布尔掩码
使用 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 secondnlargest 和 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 反馈 — 无需本地设置。