我有数据的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