Вы можете использовать boto3
для загрузки файла, но, учитывая, что вы работаете с фреймом данных и pandas
, вам следует учитывать dask
. Вы можете установить его через conda install dask s3fs
import dask.dataframe as dd
Читать с S3
df = dd.read_csv('s3://{}/{}'.format(bucket, data2read),
storage_options={'key': AWS_ACCESS_KEY_ID,
'secret': AWS_SECRET_ACCESS_KEY})
Обновление
Теперь, если вы хотите использовать этот файл в качестве pandas
кадра данных, вы должны вычислить его как
df = df.compute()
Запись на S3
Для обратной записи в S3 сначала необходимо загрузить df
в dask с номером раздела (должен быть указан), который вам нужен
df = dd.from_pandas(df, npartitions=N)
А потом вы можете загрузить на S3
df.to_csv('s3://{}/{}'.format(bucket, data2write),
storage_options={'key': AWS_ACCESS_KEY_ID,
'secret': AWS_SECRET_ACCESS_KEY})
Обновление
Несмотря на то, что API
аналогичен, to_csv
в pandas
не совпадает с * в 1031 *, в частности, последний имеет параметр storage_options
.
Кроме того, dask
не сохраняет в уникальный файл. Позвольте мне объяснить: если вы решите записать в s3://my_bucket/test.csv
с помощью dask
, то вместо файла с именем test.csv
у вас будет папка с таким именем, содержащая N
файлов, где N
- это количество разделов, которые мы определили ранее.
Заключительная записка
Я понимаю, что может быть странно сохранять несколько файлов, но, учитывая, что dask
читает все файлы в папке, как только вы привыкнете, это может быть очень удобно.