【问题标题】:loading strings with spaces as numpy array将带空格的字符串加载为numpy数组
【发布时间】:2013-05-21 03:58:59
【问题描述】:

我想将 csv 文件加载为 numpy 数组。每行包含带空格的字符串字段。 我尝试使用 numpy 中可用的 loadtxt() 和 genfromtxt() 方法。默认情况下,这两种方法都将空格视为分隔符,并将字符串中的每个单词分隔为单独的列。无论如何要使用 loadtxt() 或 genfromtxt() 加载此类数据,还是我必须为它编写自己的代码?

我文件中的示例行:

826##25733##Emanuele Buratti## ##Mammalian cell expression

这里##是分隔符,空格表示缺失值。

【问题讨论】:

  • 您是否尝试在对 np.loadtxt() 的调用中包含分隔符关键字?即 np.loadtxt(delimiter="##")
  • 我使用了这个np.genfromtxt(trainFile, dtype = str, delimiter = '##', comments = '//', missing_values = ' ') loadtxt 遵循类似的语法。

标签: python csv numpy


【解决方案1】:

我认为您的问题是默认 cmets 字符 # 与您的分隔符冲突。我能够像这样加载您的数据:

>>> import numpy as np
>>> np.loadtxt('/tmp/sample.txt', dtype=str, delimiter='##', comments=None)
array(['826', '25733', 'Emanuele Buratti', ' ', 'Mammalian cell expression'], 
      dtype='|S25')

您可以看到 dtype 已自动设置为最大长度字符串。如果这很麻烦,您可以使用dtype=object。顺便说一句,由于您的数据不是数字,我可能会建议使用 csv 模块而不是 numpy 来完成这项工作。

【讨论】:

    【解决方案2】:

    这是 csv 等价物,正如 wim 建议的那样:

    import csv
    
    with open('somefile.txt') as f:
        reader = csv.reader(f, delimiter='##')
        rows = list(reader)
    

    正如@wim 指出的cmets,这实际上不起作用,因为分隔符必须是一个字符。因此,如果您将上述内容更改为 delimiter='#',您将得到以下结果:

    [['826', '', '25733', '', 'Emanuele Buratti', '', ' ', '', 'Mammalian cell expression']]
    

    【讨论】:

    • Burhan,我认为如果不进行预处理,这将无法工作,因为 csv 分隔符必须是 1 个字符的字符串。
    • 对,你是@wim。谢谢;但是使用单个 # 作为分隔符,您仍然可以获得所需的结果,除非您在列表中有额外的空格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2017-03-27
    • 2019-01-24
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多