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 (это то, что случилось со мной). Эта проблема была исправлена в прошлом году.