Данные от 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]
Теперь у вас есть список позиций строк, которые нужно сохранить, и вы можете использовать дубль, как и ожидалось.
Пожалуйста, дайте мне знать, если словарь (позиция и индекс) не подходит, чтобы я мог его исправить. Я не являюсь носителем английского языка, и значение этих слов очень важно в этой проблеме.