我有一个文本文件,其中包含以字符串,整数和浮点数形式的信息行,并用空格隔开,例如
HIP893 23_10 7 0.028 4
HIP1074 43_20 20 0.0141 1
HIP1325 23_10 7 0.02388 5
...
我已使用以下行导入了此数据:
data=np.genfromtxt('98_info.txt', dtype=(object, object, int,float,float))
但是,当我这样做时,我得到的输出
[(b'HIP893', b'23_10', 7, 0.028, 4)
(b'HIP1074', b'43_20', 20, 0.0141, 1)
(b'HIP1325', b'23_10', 7, 0.02388, 5)
... ]
而我希望没有“ b”,而是:
[('HIP893', '23_10', 7, 0.028, 4.0)
('HIP1074', '43_20', 20, 0.0141, 1.0)
('HIP1325', '23_10', 7, 0.02388, 5.0)
... ]
我已经尝试过NumPy的core.defchararray,但是这给了我错误'非字符串数组上的字符串操作',我想这是因为我的数据可能是字符串和数字的组合?
是否有某种方法可以删除字符但将数据保留在数组中,或者是否有另一种方式加载信息以将字符串保留在引号中,而将数字保留在不带引号的情况下?
如果有一种方法可以更好地将其作为2d np数组导入,但是如果没有的话,这不是问题。
谢谢!
与您的样品和dtype
:
In [1]: np.genfromtxt('stack55810419.txt', dtype=(object, object, int,float,floa
...: t))
Out[1]:
array([(b'HIP893', b'23_10', 7, 0.028 , 4.),
(b'HIP1074', b'43_20', 20, 0.0141 , 1.),
(b'HIP1325', b'23_10', 7, 0.02388, 5.)],
dtype=[('f0', 'O'), ('f1', 'O'), ('f2', '<i8'), ('f3', '<f8'), ('f4', '<f8')])
使用dtype=None
(和encoding=None
):
In [5]: np.genfromtxt('stack55810419.txt', dtype=None, encoding=None)
Out[5]:
array([('HIP893', 2310, 7, 0.028 , 4),
('HIP1074', 4320, 20, 0.0141 , 1),
('HIP1325', 2310, 7, 0.02388, 5)],
dtype=[('f0', '<U7'), ('f1', '<i8'), ('f2', '<i8'), ('f3', '<f8'), ('f4', '<i8')])
指定unicode dtypes(必须包含大小):
In [6]: np.genfromtxt('stack55810419.txt', dtype=('U7', 'U7', int,float,float))
Out[6]:
array([('HIP893', '23_10', 7, 0.028 , 4.),
('HIP1074', '43_20', 20, 0.0141 , 1.),
('HIP1325', '23_10', 7, 0.02388, 5.)],
dtype=[('f0', '<U7'), ('f1', '<U7'), ('f2', '<i8'), ('f3', '<f8'), ('f4', '<f8')])
我对为什么None
情况为第二列选择一个整数dtype感到困惑(下划线应该可以避免这种情况)。
dtype=None
不使用encoding参数会引发以下警告:
/ usr / local / bin / ipython3:1:VisibleDeprecationWarning:不指定编码参数而读取unicode字符串已被弃用。设置编码,对系统默认值使用无。
在Py2中,默认的字符串类型是字节字符串。在Py3 unicode中。genfromtxt
已bytestrings
与py2兼容使用。但是最新版本已添加了encoding
参数。但是这种转换似乎仍然有些粗糙。
这也许是我得到的原因i8
; Python自己int
接受下划线。
In [20]: int('23_10')
Out[20]: 2310
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句