#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[:]