【问题标题】:How to delete rows from a pandas DataFrame with method chaining?如何使用方法链接从 pandas DataFrame 中删除行?
【发布时间】:2017-02-02 16:29:01
【问题描述】:

pandas 是否与 dplyr 的 filter() 操作类似? 基本上我希望能够根据谓词删除行。

我当然可以df = df[condition],但它的组合不如方法链好。

【问题讨论】:

  • pandas 有一个filter 方法,但这需要一系列标签,通常人们会使用谓词制作掩码并传递它

标签: python pandas method-chaining


【解决方案1】:

使用query

考虑数据框df

df = pd.DataFrame(
    np.random.randint(-5, 6, (10, 10)),
    columns=list('ABCDEFGHIJ'))

df

   A  B  C  D  E  F  G  H  I  J
0  0  4 -1  1 -3 -1 -4 -5 -1  2
1 -4  2 -1  0  5 -1  1 -3  1  4
2  3 -2  3 -2 -4  5  1  1  0 -2
3  1  4 -5  4 -3 -3 -3 -3 -4  4
4 -3  4  4  5 -2 -3 -1  3  3 -1
5  0  0 -1 -1  2  2  5 -4 -1 -1
6 -2  1  2  0 -1 -1  1  0  4 -4
7  5  2  5  2  3  2  3 -3  1  1
8 -2 -5  1  4  0 -1  4  4 -5  3
9 -3 -2 -5  0 -5 -2 -2  2  0 -1

您可以轻松地根据过滤条件进行流水线操作

df.query('A < 0')

   A  B  C  D  E  F  G  H  I  J
1 -4  2 -1  0  5 -1  1 -3  1  4
4 -3  4  4  5 -2 -3 -1  3  3 -1
6 -2  1  2  0 -1 -1  1  0  4 -4
8 -2 -5  1  4  0 -1  4  4 -5  3
9 -3 -2 -5  0 -5 -2 -2  2  0 -1

您可以包含多个条件

df.query('A < 0 & B < -1')

   A  B  C  D  E  F  G  H  I  J
8 -2 -5  1  4  0 -1  4  4 -5  3
9 -3 -2 -5  0 -5 -2 -2  2  0 -1

你可以做很多很酷的事情

df.query('-3 < A < 3 & H * J > 0')

   A  B  C  D  E  F  G  H  I  J
5  0  0 -1 -1  2  2  5 -4 -1 -1
8 -2 -5  1  4  0 -1  4  4 -5  3

所有这些都作为数据帧返回以启用下一个操作

【讨论】:

  • 这是否适用于非数字列上的谓词?
  • 是的,如果您提供示例数据以及您想用它做什么。我们可以向您展示如何做到这一点。
  • 如果我想传递一个更复杂的函数或者我不想通过这样的字符串编码怎么办?还有其他选择吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 2018-01-11
  • 2018-05-01
相关资源
最近更新 更多