【问题标题】:numpy.genfromtxt removes colons from names/keysnumpy.genfromtxt 从名称/键中删除冒号
【发布时间】:2017-08-23 03:32:35
【问题描述】:

我使用 numpy 的 np.genfromtxt(FileName,delimiter=",",names=True) 将 csv 文件导入到 numpy 数组中。一切似乎都正常,除了我的标题名称带有冒号(例如Points:1),但 numpy 设置此数据列的键不带冒号(例如Points1)。

为什么会发生这种情况,有什么方法可以防止它发生?

MWE

分钟.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')]

【问题讨论】:

    标签: python csv numpy


    【解决方案1】:

    来自numpy '验证名称'下的文档:

    deletechars 给出一个字符串,该字符串组合了所有必须为 从名称中删除。默认情况下,无效字符是 ~!@#$%^&amp;*()-=+~\|]}[{';: /?.&gt;,&lt;.

    所以您需要做的就是添加您自己的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')]
    

    【讨论】:

      【解决方案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')])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-16
        • 1970-01-01
        • 1970-01-01
        • 2017-11-07
        • 2021-04-11
        • 2010-11-29
        • 2016-03-09
        • 1970-01-01
        相关资源
        最近更新 更多