python - 如何使用 NumPy 正确从 SQL 数据库读取字符串

标签 python mysql string numpy

我有一个数据集,正在使用 SQL 查询。我的查询返回一个长字符串,其中仅包含列名称,然后是数据,行由换行符分隔。然后我使用 numpy.genfromtxt将这个长字符串转换为 numpy 数组。

但是,有几列应该作为字符串读取。因此,我明确传递 dtype数组到genfromtxt以便它正确保存列值。但是,当我检查输出时,所有应该是字符串的列条目都简单地显示为 '' ,一个空字符串。

我将这些列的数据类型声明为 str 。例如,在原始数据集中,一个变成空字符串的条目是单词GALAXY。 。然而,在数据集的官方文档上,列出该列的数据类型为 varchar 。我假设str这是正确的类型,但我想不是。

<小时/>

编辑:忽略这与 SQL 有何关系。基本上,我有一个查询结果的字符串,我需要使用 np.genfromtxt 将其打包到 numpy 数组中。我避免发布显式字符串,因为它们看起来很残酷,但这里有一个:

b'bestObjID,ra,dec,z,zErr,zWarning,class,subClass,rChi2,DOF,rChi2Diff,z_noqso,zErr_noqso,zWarning_noqso,class_noqso,subClass_noqso,rChi2Diff_noqso,velDisp,velDispErr,velDispZ,velDispZErr,velDispChi2\n1237662340012638224,239.58334,27.233419,0.09080672,2.924875E-05,0,GALAXY,,1.104714,3735,1.411605,0,0,0,,,0,272.6187,13.61222,0,0,1815.653\n'

如您所见,它是 bytes行由 \n 分隔的对象第一行是列标签。

将其传递给 np.genfromtxt 的结果是

array((1237662340012638224, 239.58334, 27.233419, 0.09080672264099121, 2.9248749342514202e-05, 0, '', '', 1.104714035987854, 3735.0, 1.4116050004959106, 0.0, 0.0, 0, '', '', 0.0, 272.61871337890625, 13.61221981048584, 0.0, 0.0, 1815.6529541015625), dtype=[('bestObjID', '<i8'), ('ra', '<f8'), ('dec', '<f8'), ('z', '<f4'), ('zErr', '<f4'), ('zWarning', '<i8'), ('class', '<c16'), ('subClass', '<c16'), ('rChi2', '<f4'), ('DOF', '<f4'), ('rChi2Diff', '<f4'), ('z_noqso', '<f4'), ('zErr_noqso', '<f4'), ('zWarning_noqso', '<i8'), ('class_noqso', '<c16'), ('subClass_noqso', '<c16'), ('rChi2Diff_noqso', '<f4'), ('velDisp', '<f4'), ('velDispErr', '<f4'), ('velDispZ', '<f4'), ('velDispZErr', '<f4'), ('velDispChi2', '<f4')])

你可以看看应该怎么说'GALAXY'变成 ''当我指定该条目的数据类型为str时。如果我改用 c数据类型,我可以恢复 GGALAXY ,但仅此而已。如果我尝试使用 c8c16 ,我得到(nan+0j)

最佳答案

我猜你是如何使用 genfromtxt 的,但这似乎有效?

import numpy as np
from StringIO import StringIO

s = b'bestObjID,ra,dec,z,zErr,zWarning,class,subClass,rChi2,DOF,rChi2Diff,z_noqso,zErr_noqso,zWarning_noqso,class_noqso,subClass_noqso,rChi2Diff_noqso,velDisp,velDispErr,velDispZ,velDispZErr,velDispChi2\n1237662340012638224,239.58334,27.233419,0.09080672,2.924875E-05,0,GALAXY,,1.104714,3735,1.411605,0,0,0,,,0,272.6187,13.61222,0,0,1815.653\n'

S = lambda : StringIO(s)

np.genfromtxt(S(), dtype = None, names=True, delimiter=',')

输出

array((1237662340012638224, 239.58334, 27.233419, 0.09080672, 2.924875e-05, 0, 'GALAXY', False, 1.104714, 3735, 1.411605, 0, 0, 0, False, False, 0, 272.6187, 13.61222, 0, 0, 1815.653), 
  dtype=[('bestObjID', '<i8'), ('ra', '<f8'), ('dec', '<f8'), ('z', '<f8'), ('zErr', '<f8'), ('zWarning', '<i8'), ('class', 'S6'), ('subClass', '?'), ('rChi2', '<f8'), ('DOF', '<i8'), ('rChi2Diff', '<f8'), ('z_noqso', '<i8'), ('zErr_noqso', '<i8'), ('zWarning_noqso', '<i8'), ('class_noqso', '?'), ('subClass_noqso', '?'), ('rChi2Diff_noqso', '<i8'), ('velDisp', '<f8'), ('velDispErr', '<f8'), ('velDispZ', '<i8'), ('velDispZErr', '<i8'), ('velDispChi2', '<f8')])

关于python - 如何使用 NumPy 正确从 SQL 数据库读取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38837569/

相关文章:

python - 局部变量也是类变量

c# - 获取 MySqlDbType 的大小

java - Ibatis startBatch() 仅适用于 SqlMapClient 自己的启动和提交事务,不适用于 Spring 管理的事务

php - 字符串字符串的正则表达式?

python - 从 Excel 填充 QTableWidget

python - 如何打印 tkinter Scale 小部件的值?

python - fork 图 python - 没有图像?

mysql - Sql:如何在sql表中添加多个条目

python - 如何从 Python3 中给定的值列表中获取字符串中每个字符的值?

c++ - 通过 C++ main char** args 处理不同字符串编码的正确方法是什么?