Pandas: игнорировать все строки после определенной строки при чтении файла в DataFrame

У меня есть pandas DataFrame, который можно резюмировать следующим образом:

[Header] Some_info = some_info [Data] Col1 Col2 0.532 Point 0.234 Point 0.123 Point 1.455 Square 14.64 Square [Other data] Other1 Other2 Test1 PASS Test2 FAIL 

Моя цель – прочитать только часть текста между [Data] и [Other data] , которая является переменной (разная длина). Заголовок всегда имеет одинаковую длину, поэтому можно использовать skiprows из pandas.read_csv . Тем не менее, skipfooter нуждается в количестве строк для пропусков, которые могут меняться между файлами.

Что было бы лучшим решением здесь? Я хотел бы избежать изменения файла извне, если нет другого решения.

  • Python, Flask: как настроить заголовок ответа для всех ответов
  • Приложение Python ничего не печатает при запуске отсоединенного в докере
  • Запускать определенный код каждые n секунд
  • Как использовать связанный API с python
  • Имеет ли scipy.interpolate.interp1d проблемы с десятичными значениями, ведущими значения x?
  • не удается поймать SQLAlchemy IntegrityError
  • Python в реальном времени
  • Результат возврата от Python до Vba
  • 2 Solutions collect form web for “Pandas: игнорировать все строки после определенной строки при чтении файла в DataFrame”

    Этот метод должен работать над файлом дважды.

     import itertools as it def get_footer(file_): with open(file_) as f: g = it.dropwhile(lambda x: x != '[Other data]\n', f) footer_len = len([i for i, _ in enumerate(g)]) return footer_len footer_len = get_footer('file.txt') df = pd.read_csv('file.txt', … skipfooter=footer_len) 

    Genfromtxt от Numpy имеет возможность принимать генератор как вход (а не напрямую) – генератор может просто перестать уступать, как только он достигнет нижнего колонтитула. Полученный структурированный массив может быть преобразован в pandas DataFrame. Это не идеально, но это не похоже на то, что pandas 'read_csv может принимать генератор напрямую.

     import numpy as np import pandas as pd def skip_variable_footer(infile): for line in infile: if line.startswith('[Other data]'): raise StopIteration else: yield line with open(filename, 'r') as infile: data = np.genfromtxt(skip_variable_footer(infile), delimiter=',', names=True, dtype=None) df = pd.DataFrame(data) 
    Python - лучший язык программирования в мире.