Python 如何使用方法链接从数据框中删除行?
熊猫有类似于dplyr的filter()操作吗? 基本上,我希望能够基于谓词删除行 我当然可以做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 -
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
所有这些都以数据帧的形式返回,以启用下一个操作熊猫有一个方法,但这需要一系列标签,通常会使用谓词来制作掩码并传递,这对非数字列上的谓词有效吗?是的,如果您提供示例数据以及希望如何处理它。我们可以告诉你怎么做。如果我想传递一个更复杂的函数,或者我不想通过这样的字符串编码,该怎么办?还有别的选择吗?