Python pandas循环删除csv行,直到字符串出现

时间:2016-06-30 09:53:32

标签: python csv pandas

我无法创建一个逐行读取.csv文件的代码并继续删除行,直到找到某个字符串。 例如,我想只保留“AH”之后的行:

SG 1 2 3

OH 3 3 UI

AH 4 5 5

R3 4 4 4

代码应仅返回:

R3 4 4 4

任何人都可以帮我这个吗?

由于

2 个答案:

答案 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转换为字符串并进行比较。然后 cumsumshiftany已创建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