#pandas #dataframe
#pandas #фрейм данных
Вопрос:
У меня есть файл CSV, содержащий заголовок и 12 653 750 строк данных. Я хотел бы использовать pandas для чтения заголовка и последних 2 653 750 строк. Другими словами, я хотел бы пропустить первые 10 000 000 строк данных и с помощью этого кода:
part_data = pd.read_csv("data.csv", skiprows=range(1, 10000001), index_col=False)
Поэтому я ожидаю, что pandas вернет фрейм данных с заголовком и 2 653 750 строками данных. Однако то, что я получаю от pandas, — это фрейм данных с заголовком и 5 123 000 строк данных, что не должно быть возможным. Забавно, что когда я попробовал skiprows=range(1, 20000001)
pandas по-прежнему возвращает dataframe (без каких-либо ошибок), но теперь с 123 000 строк, хотя полные данные не содержат так много строк.
Я попробовал тот же код на довольно небольшом наборе данных с 50 строками, и там он работает отлично. Есть идеи, что может быть причиной такого странного поведения и, самое главное, как обойти эту проблему?
Просто чтобы сказать это заранее, я полностью осведомлен о других пакетах, таких как vaex или Dask (которые в какой-то момент сводили меня с ума), но я хотел, чтобы этот простой процесс работал с pandas.
Комментарии:
1. Что произойдет, если вы посмотрите на начало / конец импортированного df? Являются ли импортированные строки полными строками? Или он разделяет ваши строки после некоторого столбца?
2. Похоже на ошибку. Вместо этого вы можете попробовать
Dictreader
использовать модуль csv, а затем преобразовать результаты в Dataframe.3. @noah Спасибо за ваше предложение. Я только что проверил, и оба
.head()
и.tail()
возвращают строки с данными (непустыми). Чтобы перепроверить, я также открыл файл с помощью программы для просмотра больших файлов и обнаружил, что все остальные строки в моем CSV-файле были пустыми, начиная со строки 5 061 501 и далее. Поскольку.read_csv
skip_blank_lines=True
по умолчанию используется параметр (я не знал об этом) Я получаю именно то количество строк, которое ожидалось при загрузке полных данных. Но, похоже, это плохо работает при использованииskiprows
аргумента.4. @MichaelGardner Спасибо за ваше предложение. Я буду иметь в виду эту опцию.