如何选择 DataFrame 的子集?

我们在处理数据时,经常需要提取数据集的子集,无论是提取特定的列、根据条件筛选行,还是两者结合。在本指南中,我们将探索使用 Python 中的 pandas 库选择数据子集的各种方法。所有示例均使用 nba.csv 数据集。

Python

import pandas as pd

df = pd.read_csv("nba.csv")
df.head()

输出结果

!image

选择列

要选择 DataFrame 的子集,一种常见的方法是隔离特定的列。这有助于让我们专注于分析或可视化所需的相关数据。

示例 1: 在这个示例中,我们使用方括号表示法从数据集中仅提取一列 "Age"。

Python

import pandas as pd
df = pd.read_csv("nba.csv")

a = df["Age"]
print(a.head())

输出结果

!Output单列输出

说明: df["Age"] 返回名为 "Age" 的列作为 pandas.Series,而 head() 默认显示前 5 行。
示例 2: 在这个示例中,我们通过传递列名列表来选择多列,即 "Name" 和 "Age"。

Python

import pandas as pd
df = pd.read_csv("nba.csv")
df.head()

res = df[["Name", "Age"]]
print(res.head())

输出结果

!Output多列输出

说明: df[["Name", "Age"]] 使用列表来选择多列,结果仍然是仅包含指定列的 DataFrame。

选择行

要选择 DataFrame 的子集,另一种关键方法是根据条件筛选行。这允许我们只关注符合特定标准(如年龄或薪水阈值)的记录。

示例 1: 在这个示例中,我们筛选 "Age" 列的值大于 30 的行。

Python

import pandas as pd
df = pd.read_csv("nba.csv")
df.head()

res = df[df["Age"] > 30]
print(res.head())

输出结果

!Output筛选后的行

说明: df["Age"] > 30 返回一个布尔 Series,通过 df[condition],我们仅检索条件为 True 的行。
示例 2: 在这个示例中,我们选择年龄大于 30 且薪水高于 1000 万的球员。

Python

import pandas as pd
df = pd.read_csv("nba.csv")
df.head()

res = df[(df["Age"] > 30) & (df["Salary"] > 10000000)]
print(res.head())

输出结果

!Output复杂筛选

说明: 我们使用 & 来组合条件(逻辑与)。每个条件都包含在括号内,结果是同时满足两个条件的筛选后的 DataFrame。

同时选择行和列

要根据行和列选择 DataFrame 的特定子集,我们可以使用 .loc[] 或 .iloc[]。这允许我们应用过滤器并同时仅提取相关列,从而给予我们精确的控制。

示例 1: 在这个示例中,我们首先选择年龄大于 25 的球员名字,然后选择 "Lakers" 球队球员的姓名和年龄。

Python

import pandas as pd

df = pd.read_csv("nba.csv")
a = df.loc[df["Age"] > 25, "Name"]
print(a.head())

b = df.loc[df["Team"] == "Lakers", ["Name", "Age"]]
print(b.head())

输出结果

!Output基于标签的筛选

说明:

  • df.loc[condition, column] 允许我们选择符合条件的行和特定的列。
  • 第一个查询返回年龄大于 25 的球员名字的 Series。
  • 第二个查询返回属于 "Lakers" 球队的球员姓名和年龄的 DataFrame。

示例 2: 在这个示例中,我们使用行和列的索引位置选择前 5 行和前 3 列。

Python

import pandas as pd
df = pd.read_csv("nba.csv")

res = df.iloc[:5, :3]
print(res)

输出结果

!Output基于索引的切片

说明:

  • df.iloc[rowindex, columnindex] 通过整数索引进行选择。
  • :5 选择索引从 0 到 4 的行。
  • :3 选择前 3 列(索引 0 到 2)。

使用 .head() 和 .tail() 进行选择

要快速查看从开

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/50523.html
点赞
0.00 平均评分 (0% 分数) - 0