Добавление списка в массив numpy

#python #arrays #numpy #csv

#python #массивы #numpy #csv

Вопрос:

У меня (вероятно) очень глупый вопрос. Я пытаюсь использовать numpy для создания массива с данными из файла csv. Я хочу, чтобы каждая строка и столбец в файле csv были уникальными строкой и столбцом в массиве numpy. Для этого я считываю данные с помощью модуля CSV и пытаюсь использовать цикл for для добавления этого в мой массив numpy. Я не могу заставить его работать. (В файле csv используются строки)

 import csv
import numpy as np

f = open('data.csv')
csv_file = csv.reader(f)

arr = np.zeros((121, 30))
rotations = 0
x = 0

for row in csv_file:
    arr[x] = row
    x  = 1

f.close()
  

Выше приведен код, который не работает. (Обратите внимание, я пробовал использовать различные способы инициализации модели, такие как numpy.полный, и они все еще не работали)

Комментарии:

1. Вы пробовали использовать np.append ?

2. добавьте строки в список. Это проще и быстрее. Затем создайте массив из списка списков.

3. @Теодор, не рекомендую np.append

4. Какую ошибку вы получаете? не работает — это неадекватный способ описания проблемы.

5. Какую ошибку вы получаете? не работает — это неадекватный способ описания проблемы.

Ответ №1:

Вы можете попробовать np.append :

 import csv
import numpy as np

f = open('data.csv')
csv_file = csv.reader(f)

arr = np.zeros((121, 30))
rotations = 0
x = 0

for row in csv_file:
   arr = np.append(arr,row)


f.close()
  

Ответ №2:

Пока каждая строка вашего csv-файла содержит 30 элементов (которые вы указали в качестве измерения вашего массива NumPy), ваш код должен работать, даже если строки имеют значения в виде строк. С другой стороны, вы можете читать данные csv намного проще, используя Pandas, который использует массивы NumPy в фоновом режиме. Например,

 import pandas as pd

df = pd.read_csv("data.csv")
arr = df.to_numpy() # This turns a Pandas dataframe to a NumPy array.
  

Ответ №3:

Похоже, вы уже знаете, сколько строк и столбцов ожидать, поэтому вам просто нужно поместить содержимое строки в массив.

И давайте оживим ваш код с помощью диспетчера контекста и enumerate() !

 with open('data.csv', 'r') as f:
    csv_file = csv.reader(f)

    for i, row in enumerate(csv_file):
        arr[i,:] = row[:]