假设我创建了一个包含以下三行的文件
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]])