我使用numpy的np.genfromtxt(FileName,delimiter=",",names=True)
将csv文件导入numpy数组。一切似乎都运行良好,除了我的标题名称带冒号(例如Points:1
),但numpy为没有冒号的数据列设置了键(例如Points1
)。
为什么会发生这种情况,有没有办法阻止它?
min.csv:
"Time", "Points:0", "Points:1"
0.0, 1.0, 2.0
3.0,4.0,5.0
脚本:
import numpy as np
data = np.genfromtxt("min.csv",delimiter=",",names=True)
print data
print data.dtype
输出:
[( 0., 1., 2.) ( 3., 4., 5.)]
[('Time', '<f8'), ('Points0', '<f8'), ('Points1', '<f8')]
答案 0 :(得分:4)
来自'验证名称'下的numpy
文档:
deletechars
给出一个字符串,组合所有必须的字符 从名称中删除。默认情况下,无效字符是~!@#$%^&*()-=+~\|]}[{';: /?.>,<
。
所以您需要做的就是添加自己的deletechars
值。在下面的示例中,我只是从文档中复制了字符串并删除了冒号:
import numpy as np
data = np.genfromtxt(
"min.csv",delimiter=",",names=True,
deletechars="~!@#$%^&*()-=+~\|]}[{'; /?.>,<",
)
print data
print data.dtype
结果如下:
[( 0., 1., 2.) ( 3., 4., 5.)]
[('Time', '<f8'), ('Points:0', '<f8'), ('Points:1', '<f8')]
答案 1 :(得分:2)
您需要使用deletechars
参数来控制从名称中删除的内容。通常,名称被“清理”,因此它们将作为recarray
名称(即作为有效的Python变量/属性名称)。在过去,我发现dtype=None
也需要这项工作(现在可能会更正)。
Numpy.genfromtxt deleting square brackets in dtype.names
In [1137]: txt = b""""Time", "Points:0", "Points:1"
...: 0.0, 1.0, 2.0
...: 3.0,4.0,5.0"""
In [1141]: np.genfromtxt(txt.splitlines(),delimiter=',',names=True,deletechars='',dtype=None)
Out[1141]:
array([( 0., 1., 2.), ( 3., 4., 5.)],
dtype=[('Time', '<f8'), ('Points:0', '<f8'), ('Points:1', '<f8')])