繁体   English   中英

numpy.genfromtxt从名称/键中删除冒号

[英]numpy.genfromtxt removes colons from names/keys

我使用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')]

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')]

您需要使用deletechars参数来控制从名称中删除的内容。 通常,名称会被“ recarray ”,因此它们可以用作recarray名称(即,有效的Python变量/属性名称)。 在过去,我发现dtype=None也是完成这项工作所必需的(现在可以更正)。

Numpy.genfromtxt删除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')])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM