Эквивалент pandas read_sql_query для массива numpy?

Я хотел бы использовать что-то эквивалентное pandas «read_sql_query», чтобы загружать данные из базы данных в массив numpy, а не в кадр данных pandas.

В пандах я использую что-то вроде:

df = pd.read_sql_query(sql="select * from db;", con=con, index_col='index')

И теперь мне понадобится такая функция, как:

A = read_sql_to_np(sql="select * from db;")

где A - массив numpy.


person Henry    schedule 28.01.2020    source источник


Ответы (1)


Любой кадр данных можно преобразовать в массив numpy с помощью метода to_array():

>>> df = pandas.DataFrame({'A': [1, 2, 3], 
                           'B': [1.0, 2.0, 3.0], 
                           'C': ['a', 'b', 'c']})
>>> df.to_numpy()
array([[1, 1.0, 'a'],
       [2, 2.0, 'b'],
       [3, 3.0, 'c']], dtype=object)
>>> df['A'].to_numpy()
array([1, 2, 3])
>>> df[['A', 'B']].to_numpy()
array([[1., 1.],
       [2., 2.],
       [3., 3.]])
>>> df[['C']].to_numpy()
array([['a'],
       ['b'],
       ['c']], dtype=object)

Таким образом, вы можете просто использовать pandas, а затем извлечь массив numpy из полученного кадра данных.

Как парфе указывает, вы должны быть осторожны с типами данных при выполнении преобразования. Я оставил это неявным в приведенном выше примере, но обратите внимание, как первый пример генерирует массив с dtype=object, тогда как второй генерирует обычный массив с плавающей запятой. Я думаю, что подробное обсуждение типов данных в numpy выходит за рамки этого вопроса.

person senderle    schedule 28.01.2020
comment
Дайте мне знать, если есть какая-то причина, по которой вам нужно полностью избегать панд. Но в подавляющем большинстве ситуаций я бы порекомендовал это, а не собственный конвертер SQL-to-numpy. - person senderle; 28.01.2020
comment
@ Генри, помните также, что таблица базы данных, скорее всего, похожа на фрейм данных pandas (столбцы разных типов), чем на массив numpy (столбцы и строки одного типа). Поэтому, естественно, API БД будет настроен для pandas, а не для numpy. - person Parfait; 28.01.2020
comment
Кстати, если ваша таблица базы данных похожа на матрицу (все типы одинаковы), возможно, вы не выполняете нормализацию базы данных! - person Parfait; 28.01.2020