Не работает, потому что pandas в skiprows опускает строки по позициям:
data = "i,a,b\ngood,1,2\nbad,3,a\nbad,a,b\ngood,1,2\nbad,3,a"
df = pd.read_csv(StringIO(data))
print (df)
i a b
0 good 1 2
1 bad 3 a
2 bad a b
3 good 1 2
4 bad 3 a
df = pd.read_csv(StringIO(data),skiprows=lambda index: 2 == index)
print (df)
i a b
0 good 1 2
1 bad a b
2 good 1 2
3 bad 3 a
df = pd.read_csv(StringIO(data),index_col='i', skiprows=lambda index: 2 == index)
print (df)
a b
i
good 1 2
bad a b
good 1 2
bad 3 a
Что короче:
df = pd.read_csv(StringIO(data),skiprows=[2])
print (df)
i a b
0 good 1 2
1 bad a b
2 good 1 2
3 bad 3 a
Но если хотите удалить индекс по имени:
df = pd.read_csv(StringIO(data),index_col='i', skiprows=['bad'])
print (df)
TypeError: требуется целое число
Не работает, нет ошибки повышения:
df = pd.read_csv(StringIO(data),index_col='i', skiprows=lambda index: 'bad' == index)
print (df)
a b
i
good 1 2
bad 3 a
bad a b
good 1 2
bad 3 a
df = pd.read_csv(StringIO(data), skiprows=lambda index: 'bad' == index)
print (df)
i a b
0 good 1 2
1 bad 3 a
2 bad a b
3 good 1 2
4 bad 3 a
Проверка образца решение из pandas документации :
df = pd.read_csv(StringIO(data), skiprows=lambda x: x % 2 != 0)
print (df)
i a b
0 bad 3 a
1 good 1 2
df = pd.read_csv(StringIO(data), index_col='i',skiprows=lambda x: x % 2 != 0)
print (df)
a b
i
bad 3 a
good 1 2
РЕДАКТИРОВАТЬ: возможное решение с данными предварительной обработки для позиций для пропуска:
df = pd.read_csv('a.csv')
print (df)
i a b
0 good 1 2
1 bad 3 a
2 bad a b
3 good 1 2
4 bad 3 a
#preprocessing
def get_row(data):
out = []
with open('a.csv', 'r') as csvfile:
reader = csv.reader(csvfile)
for i, row in enumerate(reader):
if row[0] == data:
out.append(i)
return out
skip = get_row('bad')
print(skip)
[2, 3, 5]
df = pd.read_csv('a.csv', skiprows=get_row('bad') )
print (df)
i a b
0 good 1 2
1 good 1 2