我无法创建一个逐行读取.csv文件的代码并继续删除行,直到找到某个字符串。 例如,我想只保留“AH”之后的行:
SG 1 2 3
OH 3 3 UI
AH 4 5 5
R3 4 4 4
代码应仅返回:
R3 4 4 4
任何人都可以帮我这个吗?
由于
答案 0 :(得分:0)
删除行是什么意思,或者是否意味着忽略行。 这可能适合你:
import csv
def return_required_row(filename_to_read, filename_to_write ,keyword):
with open(filename_to_read, 'r') as fin, open(filename_to_write, 'w') as fout:
reader = csv.reader(fin, delimiter=';')
writer = csv.writer(fout, delimiter=';')
for row in reader:
if row[0] == keyword:
# print row
break
for row in reader:
writer.writerow(row)
if __name__ == '__main__':
return_required_row('Export 3.csv', 'sample.csv','Distance')
答案 1 :(得分:0)
您可以先按astype
转换为字符串并进行比较。然后
cumsum
,shift
和any
已创建mask
。
上次使用boolean indexing
:
print (df)
0 1 2 3
0 SG 1 2 3
1 OH 3 3 UI
2 AH 4 5 5
3 R3 4 4 4
4 AH 4 4 4
5 R3 4 4 4
print (df.astype(str) == 'AH')
0 1 2 3
0 False False False False
1 False False False False
2 True False False False
3 False False False False
4 True False False False
5 False False False False
print (((df.astype(str) == 'AH').cumsum().shift() > 0).any(1))
0 False
1 False
2 False
3 True
4 True
5 True
dtype: bool
print (df[((df.astype(str) == 'AH').cumsum().shift() > 0).any(1)])
0 1 2 3
3 R3 4 4 4
4 AH 4 4 4
5 R3 4 4 4