Я хотел бы предложить небольшое изменение / упрощение для @ RahulAgarwal's answer .Вместо того, чтобы закрывать и повторно открывать файл, вы можете продолжить загрузку того же потока прямо в панды.Вместо того, чтобы записывать количество пропускаемых строк, вы можете записать строку заголовка и разделить ее вручную, чтобы предоставить имена столбцов:
with open(r'data.csv') as fp:
names = next(line for line in fp if line.casefold().lstrip().startswith('name'))
df = pd.read_csv(fp, names=names.strip().split())
Это имеет преимущество для файлов с большим количеством строк мусора.
Более детальная проверка может быть примерно такой:
def isheader(line):
items = line.strip().split()
if len(items) != 2:
return False
items = sorted(map(str.casefold, items))
return items[0].startswith('name') and items[1].startswith('roll')
Эта функция будет обрабатывать все ваши возможности в любом порядке, но также в настоящее время пропускает строки мусора с пробелами в них.Вы бы использовали его в качестве фильтра:
names = next(line for line in fp if isheader(line))