相当于 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?的主要内容,如果未能解决你的问题,请参考以下文章