Данные от Pandas выходят за пределы рейтинга

Я использую pandas.DataFrame.take, чтобы сохранить только определенные строки фрейма данных (те, чье значение в одном столбце соответствует определенному шаблону регулярных выражений).

Для этого я строю список индексов, чтобы держать их в цикле, проверяя, что каждая строка соответствует шаблону:

for index, row in combined_csv.iterrows():
     if re.match(regex_files_to_keep, row['commit_file']):
          indices_to_keep.append(index)

Таким образом, значение индекса возвращается pandas.DataFrame.iterrows.

Мой набор данных хранится в виде файла CSV. Он слишком велик для чтения за один раз, я использую аргумент chunksize для pandas.read_csv.

take Применительно к первому чанку работает без проблем. Однако со второго блока возникает следующая ошибка:

IndexError: индексы выходят за пределы

Я напечатал список значений и индексы первого и последнего элемента фрейма данных (используя combined_csv.index[0] а также combined_csv.index[-1]). Все значения списка находятся между индексами первого и последнего элемента фрейма данных.

Почему я получаю эту ошибку тогда?

1 ответ

Решение

Ответ состоял в том, что метод pandas.DataFrame.take принимает в качестве аргумента позицию строки, которую нужно удалить в текущем фрейме данных, а не ее индекс. Путаница возникает из-за имени аргумента, которое является индексом, но в документации явно говорится:

Массив целых, указывающий, какие позиции занять

Позвольте мне объяснить разницу на примере.

Скажем, у вас есть размер фрагмента 40000. Первый индекс вашего фрейма данных, построенный из вашего второго фрагмента, будет 40000. Однако позиция этой строки равна 0, и это значение позиции, которое take ожидает.

Вот почему вам нужно вычесть количество строк, через которые вы уже прошли (chunksize * (chunk_number - 1)) из ваших индексов. Моя соответствующая строка кода:

indices_to_keep = [x - (chunk_size * (chunk_number - 1)) for x in indices_to_keep]

Теперь у вас есть список позиций строк, которые нужно сохранить, и вы можете использовать дубль, как и ожидалось.

Пожалуйста, дайте мне знать, если словарь (позиция и индекс) не подходит, чтобы я мог его исправить. Я не являюсь носителем английского языка, и значение этих слов очень важно в этой проблеме.

Другие вопросы по тегам