Вам не хватает типов данных для столбцов в таблице temp_update_table
.
CREATE TABLE temp_update_table (
entity_id INT,
rate INT,
INDEX (entity_id)
);
Также неплохо добавить индекс для столбца, используемого в соединении.
Поскольку в вашем CSV-файле есть строка заголовка, которую следует пропустить, вам необходимо использовать предложение IGNORE
.
LOAD DATA INFILE 'sr.csv'
INTO TABLE temp_update_table
FIELDS TERMINATED BY ','
IGNORE 1 LINES
(entity_id, rate);
У Вас есть неправильная умственная модель для использования NumPy эффективно. Массивы NumPy хранятся в непрерывных блоках памяти. Если Вы хотите добавить строки или столбцы к существующему массиву, целый массив должен быть скопирован в новый блок памяти, создав разрывы для новых элементов, которые будут сохранены. Это очень неэффективно, если делается неоднократно для создания массива.
В случае добавляющих строк, Ваш лучший выбор состоит в том, чтобы создать массив, который является столь большим, как Ваш набор данных в конечном счете будет и затем добавит данные к нему строка строкой:
>>> import numpy
>>> a = numpy.zeros(shape=(5,2))
>>> a
array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])
>>> a[0] = [1,2]
>>> a[1] = [2,3]
>>> a
array([[ 1., 2.],
[ 2., 3.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])
Массив NumPy является совсем другой структурой данных из списка и разработан, чтобы использоваться по-разному. Ваше использование hstack
потенциально очень неэффективно... каждый раз, когда Вы называете его, все данные в существующем массиве копируются в новый. (Эти append
функция будет иметь ту же проблему.), Если Вы хотите создать свою матрицу один столбец за один раз, Вы могли бы быть лучшими прочь для хранения его в списке, пока это не закончено, и только затем преобразуйте его в массив.
, например,
mylist = []
for item in data:
mylist.append(item)
mat = numpy.array(mylist)
item
может быть список, массив или любой повторяемый, пока у каждого item
есть то же число элементов.
В данном случае (data
некоторое повторяемое содержание столбцы матрицы) можно просто использовать
mat = numpy.array(data)
(Также отмечают, что с помощью list
, поскольку имя переменной является, вероятно, не хорошей практикой, так как это маскирует встроенный тип тем именем, которое может привести к ошибкам.)
РЕДАКТИРОВАНИЕ:
, Если по некоторым причинам Вы действительно хотите создать пустой массив, можно просто использовать numpy.array([])
, но это редко полезно!
Можно использовать добавлять функцию. Для строк:
>>> from numpy import *
>>> a = array([10,20,30])
>>> append(a, [[1,2,3]], axis=0)
array([[10, 20, 30],
[1, 2, 3]])
столбцы For:
>>> append(a, [[15],[15]], axis=1)
array([[10, 20, 30, 15],
[1, 2, 3, 15]])
<час> РЕДАКТИРОВАНИЕ
, Конечно, как упомянуто в других ответах, если Вы не делаете некоторую обработку (напр. инверсия) на матрице/массиве КАЖДЫЙ раз, когда Вы добавляете что-то к нему, я просто создал бы список, добавил бы к ней, затем преобразовывают его в массив.