相当于 numpy 数组的 pandas read_sql_query?

Posted

技术标签:

【中文标题】相当于 numpy 数组的 pandas read_sql_query?【英文标题】:Equivalent of pandas read_sql_query for numpy array? 【发布时间】:2020-05-14 00:15:49 【问题描述】:

我想使用与 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 数组。

【问题讨论】:

这有帮助吗? What's the most efficient way to convert a mysql result set to a NumPy array? 【参考方案1】:

任何数据帧都可以使用to_array()方法转换成numpy数组:

>>> 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 数组。

正如Parfait 指出的那样,在进行转换时必须注意数据类型。我在上面的示例中留下了隐含的含义,但请注意第一个示例如何生成一个带有dtype=object 的数组,而第二个示例生成一个普通的浮点数组。我认为 numpy 中对数据类型的详细讨论超出了这个问题的范围。

【讨论】:

如果有什么理由你需要完全避免使用 pandas,请告诉我。但在绝大多数情况下,我会推荐这个而不是滚动你自己的 SQL 到 numpy 转换器。 @Henry,请记住,数据库表很可能类似于 pandas 数据框(不同类型的列),而不是 numpy 数组(相同类型的列和行)。所以很自然,将为 pandas 而不是 numpy 设置一个 DB API。 顺便说一句 - 如果您的数据库表确实类似于矩阵(所有类型都相同),那么您可能没有进行数据库规范化!

以上是关于相当于 numpy 数组的 pandas read_sql_query?的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas 读取带有 numpy 数组的 csv

pandas入门总结1

数据分析-Numpy-Pandas

pandas 和 numpy的区别

Python的pandas包的学习

模块之numpy,pandas,matplotlib