NotImplementedError: текстовый режим не поддерживается, используйте mode = 'wb' и управляйте байтами в s3fs

Я знаю, что есть аналогичный вопрос, но он более общий, а не специфический для этого пакета. Я сохраняю фрейм данных pandas в записной книжке Sagemaker Jupyter в CSV в S3 следующим образом:

df.to_csv('s3://bucket/key/file.csv', index=False)

Однако я получаю следующую ошибку:

NotImplementedError: Text mode not supported, use mode='wb' and manage bytes

Код более или менее таков, что я читаю csv из S3, выполняю некоторую предварительную обработку, а затем сохраняю его на S3. Я могу успешно читать csv из S3 с помощью:

df.read_csv('s3://bucket/key/file.csv')

Объект, который я пытаюсь сохранить на S3, действительно является pandas.core.frame.DataFrame.

В записной книжке я вижу использование !pip show package что у меня панды 0.24.2 и s3fs 0.1.5.

В чем может быть проблема?

2 ответа

Решение

Вы можете попробовать

df.to_csv("s3://bucket/key/file.csv", index=False, mode='wb')

Это должно исправить вашу ошибку. Режим по умолчанию - w, который записывает в файловую систему как текст, а не байты. Где s3 ожидает, что данные будут байтами. следовательно, вы должны указать режим как wb(запись байтов) при записи фрейма данных как csv в файловую систему.

Просто у меня была эта проблема.

Причина, похоже, в старой версии Pandas. Бегать

!pip install --upgrade pandas

в вашем Jupyter Notebook.

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

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