在 Python 中根据列值选择 DataFrame 行

在 Python 中根据列值选择 DataFrame 行
Python

使用 Pandas 按列值过滤数据帧

Python 中处理数据时,Pandas 库提供了强大的数据操作和分析工具。一项常见任务是根据特定列中的值从 DataFrame 中选择行。此操作类似于 SQL 查询:SELECT * FROM table WHERE column_name = some_value。

在本文中,我们将探讨如何使用各种方法在 Pandas 中实现这一目标。无论您是按单个值还是按多个条件进行过滤,Pandas 都提供了直观且有效的方法来处理此类操作。让我们深入了解细节。

命令 描述
pd.DataFrame() 从字典或其他数据结构创建 DataFrame 对象。
df[condition] 根据条件过滤 DataFrame 行,仅返回满足条件的行。
print() 将指定的消息或 DataFrame 输出到控制台。
df['column'] == value 创建一个布尔系列,用于过滤列与指定值匹配的行。
df['column'] >df['column'] > value 创建一个布尔系列,用于过滤列值大于指定值的行。
# Comment 用于在代码中添加解释或注释,这些解释或注释不作为脚本的一部分执行。

在 Pandas 中实现 DataFrame 行选择

在提供的脚本中,关键任务是根据特定列值过滤 DataFrame 中的行,这是数据分析中的常见要求。第一个脚本首先导入 Pandas 库 import pandas as pd。这是至关重要的,因为 Pandas 是 Python 中一个强大的数据操作库。接下来,我们使用以下命令创建一个示例 DataFrame pd.DataFrame() 包含姓名、年龄和城市数据的字典。这种结构使我们能够轻松地可视化和操作表格数据。该脚本的关键部分是我们使用以下内容过滤行 df[df['city'] == 'New York']。此命令选择城市列值为“纽约”的所有行。结果存储在变量中 ny_rows,然后打印以显示过滤后的 DataFrame。

第二个脚本遵循类似的结构,但重点是根据数字条件过滤行。导入 Pandas 并创建包含产品、价格和数量列的 DataFrame 后,该脚本使用 df[df['price'] > 150] 过滤价格大于 150 的行。此命令生成原始 DataFrame 的子集,仅包含满足指定条件的行。结果存储在 expensive_products 并打印以供核对。这两个脚本都展示了 Pandas 数据操作的强大功能和简单性。通过使用布尔索引(一种传递一系列真/假值来过滤数据的方法),我们可以根据各种条件有效地选择数据子集,使其成为数据分析师和科学家的宝贵工具。

根据列值过滤数据框中的行

Python - 使用 Pandas 进行 DataFrame 操作

import pandas as pd
# Create a sample DataFrame
data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Edward'],
    'age': [24, 27, 22, 32, 29],
    'city': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles']
}
df = pd.DataFrame(data)

# Select rows where city is New York
ny_rows = df[df['city'] == 'New York']
print(ny_rows)

# Output:
#       name  age      city
# 0    Alice   24  New York
# 2  Charlie   22  New York

根据列值查询 DataFrame 行

Python - 使用 Pandas 进行高级过滤

import pandas as pd

# Create a sample DataFrame
data = {
    'product': ['A', 'B', 'C', 'D'],
    'price': [100, 150, 200, 250],
    'quantity': [30, 50, 20, 40]
}
df = pd.DataFrame(data)

# Select rows where price is greater than 150
expensive_products = df[df['price'] > 150]
print(expensive_products)

# Output:
#   product  price  quantity
# 2       C    200        20
# 3       D    250        40

选择 DataFrame 行的高级技术

除了使用布尔索引进行基本过滤之外,Pandas 还提供了更高级的技术来根据列值选择行。其中一种方法是 query() 函数,它允许您使用类似 SQL 的语法来过滤 DataFrame 行。例如,您可以使用 df.query('age > 25 and city == "New York"') 选择年龄大于 25 且城市为纽约的行。此方法可以使您的代码更具可读性,尤其是对于复杂的情况。此外,Pandas 还提供 loc[]iloc[] 用于更精确的行选择的访问器。这 loc[] 访问器是基于标签的,这意味着您可以按标签或布尔数组过滤行。相比之下, iloc[] 访问器是基于整数位置的,允许您按索引位置过滤行。

Pandas 的另一个强大功能是能够使用以下方法过滤 DataFrame 行: isin() 方法。当您需要根据值列表过滤行时,此方法非常有用。例如, df[df['city'].isin(['New York', 'Los Angeles'])] 选择城市列值为纽约或洛杉矶的行。此外,您可以使用以下链接链接多个条件 &| 运算符来创建更复杂的过滤器。例如, df[(df['age'] > 25) & (df['city'] == 'New York')] 过滤年龄大于 25 且城市为纽约的行。这些先进技术为数据过滤提供了强大的框架,使 Pandas 成为数据分析和操作的多功能工具。

关于在 Pandas 中选择 DataFrame 行的常见问题

  1. 如何根据多个列值过滤 DataFrame 中的行?
  2. 您可以将布尔索引与多个条件结合使用 &|。例如: df[(df['age'] > 25) & (df['city'] == 'New York')]
  3. 有什么区别 loc[]iloc[]
  4. loc[] 是基于标签的,而 iloc[] 是基于整数位置的。使用 loc[] 用于按标签过滤和 iloc[] 用于按索引位置进行过滤。
  5. 我怎样才能使用 query() 过滤 DataFrame 行的函数?
  6. query() 函数允许您使用类似 SQL 的语法。例如: df.query('age > 25 and city == "New York"')
  7. 我可以根据值列表过滤行吗?
  8. 是的,您可以使用 isin() 方法。例如: df[df['city'].isin(['New York', 'Los Angeles'])]
  9. 根据字符串匹配过滤行的最佳方法是什么?
  10. 您可以使用 str.contains() 方法。例如: df[df['city'].str.contains('New')]
  11. 如何选择缺少列值的行?
  12. 您可以使用 isna() 方法。例如: df[df['age'].isna()]
  13. 如何使用自定义函数过滤行?
  14. 您可以使用 apply() 带有 lambda 函数的方法。例如: df[df.apply(lambda row: row['age'] > 25, axis=1)]
  15. 我可以根据索引值过滤行吗?
  16. 是的,您可以使用 index.isin() 方法。例如: df[df.index.isin([1, 3, 5])]

DataFrame 行选择的关键要点

根据列值从 DataFrame 中选择行是 Pandas 数据分析的一项基本技能。利用布尔索引, loc[], iloc[], query(), 和 isin() 方法允许有效的数据过滤。掌握这些技术可以增强您有效操作和分析数据集的能力。