过滤 Pandas DataFrame 中的行
Pandas 是 Python 中用于数据操作和分析的强大库。一个常见的任务是根据列值从 DataFrame 中选择行,类似于 SQL 的 SELECT * FROM table WHERE column_name = some_value。
本指南将引导您了解在 Pandas 中实现此目的的各种方法,从而轻松有效地过滤数据。无论您是初学者还是经验丰富的用户,这些提示都将提高您的数据处理技能。
命令 | 描述 |
---|---|
pd.DataFrame(data) | 从数据字典创建 DataFrame。 |
df[column_name] | 按名称访问 DataFrame 中的列。 |
df[condition] | 根据应用于列的条件过滤 DataFrame。 |
print(selected_rows) | 将 DataFrame 或其子集打印到控制台。 |
df[df['Age'] >df[df['Age'] > 25] | 选择“年龄”列值大于 25 的行。 |
df[df['City'] == 'Chicago'] | 选择“城市”列值等于“芝加哥”的行。 |
了解 Pandas 中的 DataFrame 行选择
提供的脚本演示了如何使用 Python 中的 Pandas 库根据列值从 DataFrame 中选择行。第一个脚本首先导入 Pandas 库 import pandas as pd 命令。然后,它使用数据字典创建一个示例 DataFrame,该字典使用以下命令转换为 DataFrame: pd.DataFrame(data) 命令。然后,该脚本演示了两种行选择方法:使用以下命令选择“Age”列值大于 25 的行 df[df['Age'] > 25],并使用以下命令选择“城市”列值为“芝加哥”的行 df[df['City'] == 'Chicago']。这些过滤后的数据帧使用 print() 函数显示选定的行。
第二个脚本遵循类似的结构,但使用不同的数据和选择标准。它创建一个包含产品信息的 DataFrame,包括“产品”、“价格”和“库存”列。选择“价格”小于或等于 200 的行 df[df['Price'] <= 200],并且“库存”超过 40 时使用 df[df['Stock'] > 40]。这些脚本的目的是展示如何根据特定条件过滤 DataFrame 行,类似于如何使用 SQL 查询根据列值从表中选择行。通过理解和应用这些命令,您可以有效地操作和分析 DataFrame 中的数据。
使用 Pandas 中的列值选择 DataFrame 中的行
Python 与 Pandas 库
# Importing the necessary library
import pandas as pd
# Creating a sample DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29],
'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix']
}
df = pd.DataFrame(data)
# Selecting rows where Age is greater than 25
selected_rows = df[df['Age'] > 25]
print(selected_rows)
# Selecting rows where City is 'Chicago'
chicago_rows = df[df['City'] == 'Chicago']
print(chicago_rows)
根据列标准过滤 DataFrame 中的数据
Python 与 Pandas 库
# Importing pandas library
import pandas as pd
# Creating a sample DataFrame
data = {'Product': ['A', 'B', 'C', 'D', 'E'],
'Price': [100, 150, 200, 250, 300],
'Stock': [30, 60, 90, 20, 50]}
df = pd.DataFrame(data)
# Selecting rows where Price is less than or equal to 200
affordable_products = df[df['Price'] <= 200]
print(affordable_products)
# Selecting rows where Stock is more than 40
in_stock = df[df['Stock'] > 40]
print(in_stock)
在 Pandas 中选择 DataFrame 行的高级技术
除了使用布尔索引的基本过滤之外,Pandas 还提供了根据列值选择行的高级技术。一种有效的方法是使用 query() 函数,它允许您使用查询表达式过滤行,使语法更清晰且通常更直观。例如,不要使用 df[df['Age'] > 25], 你可以写 df.query('Age > 25')。当处理更复杂的条件或列名包含空格时,此方法特别有用。此外, isin() 当您想要根据值列表过滤行时,该函数非常有用。例如,要选择“城市”列值为“芝加哥”或“纽约”的行,您可以使用 df[df['City'].isin(['Chicago', 'New York'])]。
另一种技术涉及 loc 和 iloc 索引器。这 loc 索引器是基于标签的,允许您根据行标签和列名称选择行,而 iloc 基于整数位置,允许按行号和列号进行选择。这种灵活性对于根据应用于不同列的条件选择行特别有用。例如, df.loc[df['Age'] > 25, 'Name'] 将返回年龄超过 25 岁的个人姓名。这些方法扩展了您的工具包,以有效处理和分析 Pandas 中的数据,提供更具可读性和可维护性的代码。
有关选择 DataFrame 行的常见问题和解答
- 如何根据多个条件选择行?
- 您可以使用 query() 函数或将条件与逻辑运算符组合,例如 & 和 |。例如, df[(df['Age'] > 25) & (df['City'] == 'Chicago')]。
- 我可以根据值列表过滤行吗?
- 是的,使用 isin() 功能。例如, df[df['City'].isin(['Chicago', 'New York'])]。
- 有什么区别 loc 和 iloc?
- loc 是基于标签的,而 iloc 是基于整数位置的。使用 loc 带有行/列标签和 iloc 带有行/列索引。
- 如何在过滤行时选择特定列?
- 您可以使用 loc。例如, df.loc[df['Age'] > 25, ['Name', 'City']]。
- 选择行时如何处理缺失值?
- 使用 dropna() 函数删除缺失值的行,或者 fillna() 将它们替换为指定值。
- 我可以使用正则表达式来过滤行吗?
- 是的 str.contains() 函数与 regex=True 参数允许您根据正则表达式模式过滤行。例如, df[df['Name'].str.contains('^A', regex=True)]。
- 如何根据索引过滤行?
- 您可以使用 loc 与索引名称。例如, df.loc[df.index == 'some_index']。
- 如果我的列名称包含空格或特殊字符怎么办?
- 使用 query() 可以处理此类带反引号的列名的函数。例如, df.query('`column name` == value')。
关于 DataFrame 行选择技术的最终想法
根据 Pandas 中的列值从 DataFrame 中选择行是数据操作的一项关键技能。讨论的各种方法,包括布尔索引, query(), isin(),以及基于标签和基于整数位置的索引 loc 和 iloc,提供有效过滤数据的强大工具。掌握这些技术可以实现更好的数据分析和更清晰、更易于维护的代码。