Python Pandas – 从数据框中选择子集行
在 Python 的 Pandas 库中,有时需要在一个数据框中选择子集行。这个功能是非常有用的,我们可以根据数据的筛选条件来选择需要的数据行,然后再进行进一步的分析和处理。在本文中,我们将介绍几种方法来从 Pandas 的数据框中选择子集行。
目录
- Pandas 数据框
- Pandas 行选择
- Pandas 行过滤
- Pandas 条件过滤
- Pandas 逻辑运算
- Pandas 多重条件
- Pandas 模糊匹配
- Pandas 列之间的比较
- Pandas isin() 方法
- Pandas loc 和 iloc 方法
- Pandas query 方法
- Pandas head 和 tail 方法
- Pandas sample 方法
- Pandas 小结
1. Pandas 数据框
在 Pandas 中,数据框是用于表示表格数据的主要数据结构。它可以理解为一个二维的表格,其中每一行代表一个样本,每一列代表一个变量。在一个数据框中,每个列可以是不同的数据类型(整型、浮点型、字符串等)。
下面是创建一个 Pandas 数据框的示例代码:
import pandas as pd
# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
'age': [25, 30, 35, 40],
'gender': ['M', 'M', 'F', 'F']})
print(df)
输出结果为:
name age gender
0 John 25 M
1 Sam 30 M
2 Ann 35 F
3 Mary 40 F
2. Pandas 行选择
在 Pandas 中,我们可以使用 square brackets(中括号)来选择数据框中的行。一个简单的例子如下:
import pandas as pd
# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
'age': [25, 30, 35, 40],
'gender': ['M', 'M', 'F', 'F']})
# 选择第一行
row = df.iloc[0]
print(row)
输出结果为:
name John
age 25
gender M
Name: 0, dtype: object
在上面的例子中,我们使用了 iloc 方法选择了第一行。iloc 方法是选择行的位置的整数索引。
3. Pandas 行过滤
Pandas 还可以根据数据的筛选条件来选择需要的数据行。这个功能称为行过滤。我们可以使用 square brackets(中括号)和布尔表达式来过滤数据框中的行。
下面是一个简单的例子:
import pandas as pd
# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
'age': [25, 30, 35, 40],
'gender': ['M', 'M', 'F', 'F']})
# 根据年龄过滤数据
filtered_data = df[df['age'] > 30]
print(filtered_data)
输出结果为:
name age gender
2 Ann 35 F
3 Mary 40 F
在上面的例子中,我们使用了 square brackets(中括号)和布尔表达式来过滤数据。布尔表达式 df['age'] > 30 返回了一个布尔数组,标记了数据框中哪些行的年龄大于 30。然后,我们将这个布尔数组传递给 square brackets(中括号)来选择符合条件的行。
4. Pandas 条件过滤
除了采用布尔表达式来过滤行之外,Pandas 还提供了一些其他方法,可以根据条件来过滤数据。
下面是一个简单的例子,我们将使用 Pandas 中的 query() 方法来过滤数据:
import pandas as pd
# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
'age': [25, 30, 35, 40],
'gender': ['M', 'M', 'F', 'F']})
# 使用 query() 方法来过滤数据
filtered_data = df.query('age > 30')
print(filtered_data)
输出结果为:
name age gender
2 Ann 35 F
3 Mary 40 F
在上面的例子中,我们使用了 Pandas 中的 query() 方法来过滤数据,query('age > 30') 表示选择年龄大于 30 的行。
5. Pandas 逻辑运算
在 Pandas 中,我们可以使用逻辑运算符 and、or 和 not 来连接多个条件。这个功能是非常有用的,可以帮助我们根据多个条件来筛选数据。
下面是一个简单的例子,我们将使用逻辑运算符筛选数据:
import pandas as pd
# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
'age': [25, 30, 35, 40],
'gender': ['M', 'M', 'F', 'F']})
# 使用逻辑运算符来选择数据
filtered_data = df[(df['age'] > 30) & (df['gender'] == 'F')]
print(filtered_data)
输出结果为:
name age gender
2 Ann 35 F
3 Mary 40 F
在上面的例子中,我们使用了逻辑运算符 and 来连接两个条件,选择年龄大于 30 且性别为女性的行。
6. Pandas 多重条件
在 Pandas 中,我们可以使用多重条件来筛选数据。多重条件是通过括号来分组的。下面是一个示例代码:
import pandas as pd
# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
'age': [25, 30, 35, 40],
'gender': ['M', 'M', 'F', 'F']})
# 使用多重条件过滤数据
filtered_data = df[(df['age'] >= 30) & ((df['gender'] == 'F') | (df['name'] == 'Sam'))]
print(filtered_data)
输出结果为:
name age gender
1 Sam 30 M
2 Ann 35 F
3 Mary 40 F
在上面的例子中,我们使用了多重条件来过滤数据。我们使用括号将两个条件分组,然后使用逻辑运算符 & 和 | 来连接条件。
7. Pandas 模糊匹配
在 Pandas 中,我们可以使用 str.contains() 方法来进行模糊匹配。这个方法可以用来查找包含特定字符串的行。
下面是一个示例代码:
import pandas as pd
# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
'age': [25, 30, 35, 40],
'country': ['USA', 'China', 'China', 'USA']})
# 使用模糊匹配过滤数据
filtered_data = df[df['country'].str.contains('China')]
print(filtered_data)
输出结果为:
name age country
1 Sam 30 China
2 Ann 35 China
在上面的例子中,我们使用了 str.contains() 方法来进行模糊匹配,选择国家是中国的行。
8. Pandas 列之间的比较
在 Pandas 中,我们可以对数据框中的列进行比较操作。这个功能是非常有用的,可以根据不同的列之间的关系来筛选数据。
下面是一个示例代码:
import pandas as pd
# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
'age': [25, 30, 35, 40],
'salary': [50000, 60000, 70000, 80000]})
# 比较两个列的值
filtered_data = df[df['age'] > df['salary']/1000]
print(filtered_data)
输出结果为:
name age salary
0 John 25 50000
1 Sam 30 60000
在上面的例子中,我们使用了两个列的值来进行比较操作,选择年龄大于薪水除以 1000 的行。
9. Pandas isin() 方法
在 Pandas 中,我们可以使用 isin() 方法来过滤数据,这个方法用来选择列中值包含于给定集合的行。
下面是一个示例代码:
import pandas as pd
# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
'age': [25, 30, 35, 40],
'gender': ['M', 'M', 'F', 'F']})
# 使用 isin() 方法过滤数据
filtered_data = df[df['name'].isin(['Sam', 'Mary'])]
print(filtered_data)
输出结果为:
name age gender
1 Sam 30 M
3 Mary 40 F
在上面的例子中,我们使用了 isin() 方法来过滤数据,选择名字为 Sam 或者 Mary 的行。
10. Pandas loc 和 iloc 方法
在 Pandas 中,我们可以使用 loc 方法和 iloc 方法来选择数据框中的行和列。
loc 方法使用标签索引来选择数据,而 iloc 方法使用整数索引来选择数据。
下面是一个示例代码:
import pandas as pd
# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
'age': [25, 30, 35, 40],
'gender': ['M', 'M', 'F', 'F']})
# 使用 loc 方法选择行
filtered_data = df.loc[df['age'] > 30, ['name', 'gender']]
print(filtered_data)
输出结果为:
name gender
2 Ann F
3 Mary F
在上面的例子中,我们使用了 loc 方法来选择数据,选择年龄大于 30 的行,并且只选择名字和性别这两列。
11. Pandas query 方法
除了使用 [] 运算符之外,我们还可以使用 query() 方法来选择行。 query() 方法提供了一种更简单的方式来选择数据。
下面是一个示例代码:
import pandas as pd
# 创建一个数据框
df = pd.DataFrame({'name': ['John', 'Sam', 'Ann', 'Mary'],
'age': [25, 30, 35, 40],
'gender': ['M', 'M', 'F', 'F']})
# 使用 query() 方法选择行
filtered_data = df.query('age > 30')[['name', 'gender']]
print(filtered_data)
输出结果为:
name gender
2 Ann F
3 Mary F
在上面的例子中,我们使用了 query() 方法来选择数据,选择年龄大于 30 的行,并且只选择名字和性别这两列。
12. Pandas head 和 tail 方法
在 Pandas 中,我们可以使用 head 和 tail 方法来获取数据框的前几行或者后几行数据。
下面是一个示例代码:
import pandas as pd
# 创建一个数据框
df = pd.DataFrame({'name': ['John','Sam', 'Ann', 'Mary', 'Tom', 'Jack'],
'age': [25, 30, 35, 40, 45, 50],
'gender': ['M', 'M', 'F', 'F', 'M', 'M']})
# 获取前三行
print(df.head(3))
# 获取后两行
print(df.tail(2))
输出结果为:
name age gender
0 John 25 M
1 Sam 30 M
2 Ann 35 F
name age gender
4 Tom 45 M
5 Jack 50 M
在上面的例子中,我们使用了 head 和 tail 方法来获取数据框的前三行和后两行。
极客笔记