使用genfromttxt读取txt后的Numpy数据转换



假设我创建了一个包含以下三行的文件

AtBtC
name1t1t2
name2t1.1t2.2

其中\t对应于分隔符。我使用这个numpy函数读取

data = np.genfromtxt('test.txt', delimiter='t', dtype=None, encoding='ascii')

数据是一个形状为(3,3(的numpy nd数组。我想把它重新排列成不同的数据结构,比如

fileHeader = data[0, :] 
names = data[1:, 0]
values = data[1:, 1:]

fileHeader名称应为字符串列表或np.str_,不带字符"前导和尾随"。应该是float64的nd数组,不包含字符"前导和尾随"。

如何进行此转换?提前感谢大家!

您的代码,显示结果(您应该这样做!(:

In [1]: txt = """AtBtCt
...: name1t1t2t
...: name2t1.1t2.2t""".splitlines()
In [4]: data = np.genfromtxt(txt, delimiter="t", dtype=None, encoding="ascii")
In [5]: data
Out[5]: 
array([['A', 'B', 'C', 'False'],
['name1', '1', '2', 'False'],
['name2', '1.1', '2.2', 'False']], dtype='<U5')
In [6]: fileHeader = data[0, :]
...: names = data[1:, 1]
...: values = data[1:, 1:]
In [7]: fileHeader
Out[7]: array(['A', 'B', 'C', 'False'], dtype='<U5')
In [8]: names
Out[8]: array(['1', '1.1'], dtype='<U5')
In [9]: values
Out[9]: 
array([['1', '2', 'False'],
['1.1', '2.2', 'False']], dtype='<U5')

那么问题出在哪里呢?

'A'是字符串的正常显示。False'是后面的空字段(在最后一个t之后(的填充符。

我们可以用剥离False

In [21]: data = data[:, :-1]
In [22]: data
Out[22]: 
array([['A', 'B', 'C'],
['name1', '1', '2'],
['name2', '1.1', '2.2']], dtype='<U5')

并将数字转换为浮动:

In [23]: data[1:, 1:]
Out[23]: 
array([['1', '2'],
['1.1', '2.2']], dtype='<U5')
In [24]: data[1:, 1:].astype(float)
Out[24]: 
array([[1. , 2. ],
[1.1, 2.2]])

相关内容

  • 没有找到相关文章

最新更新