Python 如何使用方法链接从数据框中删除行?

Python 如何使用方法链接从数据框中删除行?,python,pandas,method-chaining,Python,Pandas,Method Chaining,熊猫有类似于dplyr的filter()操作吗? 基本上,我希望能够基于谓词删除行 我当然可以做df=df[condition],但这并不像方法链接那样完美 考虑数据帧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 -

熊猫有类似于dplyr的filter()操作吗? 基本上,我希望能够基于谓词删除行

我当然可以做
df=df[condition]
,但这并不像方法链接那样完美

考虑数据帧
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('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')

   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('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
df.query('-30')
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

所有这些都以数据帧的形式返回,以启用下一个操作

熊猫有一个方法,但这需要一系列标签,通常会使用谓词来制作掩码并传递,这对非数字列上的谓词有效吗?是的,如果您提供示例数据以及希望如何处理它。我们可以告诉你怎么做。如果我想传递一个更复杂的函数,或者我不想通过这样的字符串编码,该怎么办?还有别的选择吗?