Противоречивая ошибка при использовании Polars read_csv() с несколькими файлами для csv.gz

Я пытаюсь прочитать несколько файлов csv.gz в фрейм данных, но он работает не так, как я ожидал.

Когда я использую этот шаблон подстановки:

pl.read_csv('folder_1\*.csv.gz')

Он возвращает эту ошибку:

ComputeError: невозможно сканировать сжатый CSV-файл; используйте read_csv для сжатых данных

Эта ошибка произошла со следующим стеком контекста: >[1] Ошибка сканирования CSV [2] ввод «выбрать» не удалось разрешить

Что странно, учитывая, что я использую именно ту функцию, которую они предлагают. Однако передача этого шаблона подстановки для CSV работает совершенно нормально:

pl.read_csv('folder_1\*.csv')

Как я могу обойти это? Сейчас я просто использую glob.glob() и перебираю список, но думаю, что без него он будет выглядеть аккуратнее.

pl.scan_csv не поддерживает glob-строки github.com/pola-rs/polars/issues/9601 , куда отправляется ваша glob-строка. Вам необходимо устранить неоднозначность вашей строки glob в одном файле.
ifly6 18.07.2024 15:48

Похоже, там тоже была опубликована ошибка github.com/pola-rs/polars/…

jqurious 18.07.2024 16:58
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда я передаю glob-строку blah/blah/blah/*.csv.gzpl.read_csv, он передает это pl.scan_csv, потому что это glob-строка. См. строку 514 и последующие поля Polars.io.csv.functions в версии 1.1.0.

Здесь есть два отдельных вопроса:

  • Как читать несколько CSV-файлов? Вы можете прочитать несколько CSV-файлов, передав строку glob в pl.scan_csv. Он возвращает ленивый фрейм данных, который затем можно оценить с помощью .collect().

  • Как читать сжатый CSV? Вы можете читать определенные типы сжатых CSV-файлов с помощью pl.read_csv (заметным исключением являются csv.xz, которые не работают).

Но сложите два вопроса вместе, и окажется, что pl.scan_csv вообще не поддерживает сжатые файлы. Это открытый вопрос.

Если вам нужен однострочник для чтения CSV-файлов, вам придется прибегнуть к чему-то вроде понимания списка с нетерпеливым выполнением:

from glob import glob
l = [pl.read_csv(i) for i in glob('*.csv.gz')]

Затем сделайте все, что хотите, со списком CSV (например, pl.concat).

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