Я бы сделал что-то вроде этого:
from io import StringIO
with open('filename.csv') as f:
lines = f.readlines()
s = StringIO(''.join((l for l in lines if ':' not in l)))
pd.read_csv(s)
В качестве альтернативы:
with open('filename.csv') as f:
lines = f.readlines()
skip_rows_idx = [i for i, l in enumerate(lines) if ':' in l]
pd.read_csv('filename.csv', skiprows=skip_rows_idx)
Если в заголовке нет двоеточий, то можно адаптировать приведенный выше код (первый пример)отбросить первые строки, например, так:
import itertools
s = StringIO(''.join(itertools.dropwhile(lambda l: ':' in l, lines)))
(при условии, что нет «плохих» строк после заголовка).