使用slice或pandas函数从表中删除行



我有数据的csv文件,但有行我不需要。任务是从表中删除行。例如:

0 A
1 B
2 C
3 D
4 E * to delete
5 F *
6 G *
7 H *
8 I
9 J
10 k
11 L
12 M *
13 N *
14 O *
15 P *

所以我想删除表中每8行最后4行。在表3089行

我尝试切片表,但没有好的结果

使用numpy制作一个蒙版:

import numpy as np
mask = (np.arange(len(df))%8//4) == 0
out = df[mask]

其他选项:

mask = np.arange(len(df))%8 < 4
out = df[mask]
输出:

col
0    A
1    B
2    C
3    D
8    I
9    J
10   k
11   L

工作原理

我们先取模8,得到每组8的位置,然后除4,与0比较,每组只保留前4个:

col  arange  %8  //4   mask
0    A       0   0    0   True
1    B       1   1    0   True
2    C       2   2    0   True
3    D       3   3    0   True
4    E       4   4    1  False
5    F       5   5    1  False
6    G       6   6    1  False
7    H       7   7    1  False
8    I       8   0    0   True
9    J       9   1    0   True
10   k      10   2    0   True
11   L      11   3    0   True
12   M      12   4    1  False
13   N      13   5    1  False
14   O      14   6    1  False
15   P      15   7    1  False

每8行分组,生成一个新的列id,并过滤掉大于4的id。

df=df.assign(id=df.groupby(df.index//8).cumcount()).query('id<=4').drop(columns='id')
item
0     A
1     B
2     C
3     D
4     E
8     I
9     J
10    k
11    L
12    M

最新更新