Как записать массив numpy в формате csv в S3

#python #numpy #amazon-s3 #python-s3fs

Вопрос:

У меня есть numpy ndarray с 2 столбцами, который выглядит следующим образом

 [[1.8238497e 03 5.2642276e-06]
 [2.7092224e 03 6.7980350e-06]
 [2.3406370e 03 6.6842499e-06]
 ...
 [1.7234612e 03 6.6842499e-06]
 [2.1071147e 03 2.1332115e-05]
 [2.6937273e 03 6.2854801e-06]]
 

Я хочу записать его как a csv с именами столбцов в S3 напрямую (без создания локального csv-файла), используя s3fs. Я знаю, как это сделать, если бы у меня был фрейм данных, и я мог бы преобразовать свой numpy в фрейм данных. Но мне бы хотелось, чтобы это можно было сделать без необходимости преобразования массива numpy в фрейм данных.

Ниже приведен код, который у меня есть

 output = [[1.8238497e 03 5.2642276e-06]
     [2.7092224e 03 6.7980350e-06]
     [2.3406370e 03 6.6842499e-06]
     ...
     [1.7234612e 03 6.6842499e-06]
     [2.1071147e 03 2.1332115e-05]
     [2.6937273e 03 6.2854801e-06]]
## write the outpout in csv at s3
s3 = s3fs.S3FileSystem(anon=False)
dftowrite = pd.DataFrame({'col1': output[:, 0], 'col2': output[:, 1]})

with s3.open(f"{'s3://bucket'}/result.csv",'w') as f:
     dftowrite.to_csv(f)
 

Я хотел бы сделать это без преобразования массива NumPy output в dftowrite фрейм данных . Есть какие-нибудь предложения?

Ответ №1:

Попробуйте это

 output = [[1.8238497e 03 5.2642276e-06]
     [2.7092224e 03 6.7980350e-06]
     [2.3406370e 03 6.6842499e-06]
     ...
     [1.7234612e 03 6.6842499e-06]
     [2.1071147e 03 2.1332115e-05]
     [2.6937273e 03 6.2854801e-06]]
## write the outpout in csv at s3
s3 = s3fs.S3FileSystem(anon=False)

with s3.open(f"{'s3://bucket'}/result.csv",'w') as f:
    numpy.savetxt(f, output, delimiter=",")