返回

如何高效删除 Pandas DataFrame 中基于列值的行?

python

高效删除 Pandas DataFrame 中基于列值的行

问题陈述

在数据处理任务中,我们经常需要从 Pandas DataFrame 中删除特定条件的行。例如,我们可能需要删除 line_race 列中值为 0 的行。手动识别和删除这些行既耗时又容易出错。本文将探讨一种高效的方法来完成此任务。

解决方案:使用 DataFrame.drop() 函数

Pandas 提供了一个称为 DataFrame.drop() 的方便函数,可用于删除 DataFrame 中的行。此函数接受一个包含要删除的行索引的列表作为参数。我们可以使用以下步骤来删除 line_race 等于 0 的行:

  1. 确定要删除的行: 使用 df[df['line_race'] == 0] 返回一个包含 line_race 等于 0 的行索引的列表。

  2. 删除行: 使用 df.drop(df[df['line_race'] == 0].index) 函数从 DataFrame 中删除这些行。

import pandas as pd

# 创建 DataFrame
df = pd.DataFrame({'line_race': [11, 11, 9, 10, 10, 9, 8, 9, 11, 8, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0]})

# 删除 line_race 等于 0 的行
df = df.drop(df[df['line_race'] == 0].index)

# 打印更新后的 DataFrame
print(df)

输出:

   line_race
0        11
1        11
2         9
3        10
4        10
5         9
6         8
7         9
8        11
9         8
10        5
11       69

优势

使用 DataFrame.drop() 函数具有以下优点:

  • 高效: DataFrame.drop() 直接修改 DataFrame,因此无需创建新的 DataFrame。
  • 灵活: 我们可以根据任何条件过滤行,包括列值、索引标签或布尔掩码。
  • 通用: DataFrame.drop() 可用于删除单个行、行列表或基于条件的行。

常见问题解答

1. 我可以删除 DataFrame 中的多列吗?

是的,您可以使用 DataFrame.drop() 函数同时删除多列。只需将要删除的列标签作为参数列表传递即可。

2. 我可以删除带有特定值的列吗?

是的,您可以使用 DataFrame.drop() 函数和布尔掩码删除带有特定值的列。例如,要删除所有值为 0 的列,可以使用以下代码:

df = df.drop(df.columns[df.eq(0).any()])

3. 删除行后,DataFrame 的索引会发生什么变化?

删除行后,DataFrame 的索引会自动重新排序,从 0 开始。

4. 如果要删除的行不在 DataFrame 中会怎样?

如果要删除的行不在 DataFrame 中,DataFrame.drop() 函数将不执行任何操作并返回原始 DataFrame。

5. 有没有其他方法可以从 DataFrame 中删除行?

除了 DataFrame.drop() 函数外,您还可以使用 DataFrame.query()DataFrame.loc 方法基于条件删除行。