【问题标题】:numpy.loadtxt: load a range of columnsnumpy.loadtxt:加载一系列列
【发布时间】:2018-08-28 19:14:55
【问题描述】:

我有一个.csv 文件,其中包含字符串和整数 - 包含列。我需要使用numpy.loadtxt 方法来导入由指定列形成的矩阵。我怎样才能做到这一点?现在我正在尝试执行以下操作:

data = np.loadtxt(open(path_to_data, "rb"), delimiter=",", skiprows=1, usecols=[1:]) 

基本上尝试读取所有列,但首先,但它给出了错误:

SyntaxError: 无效语法

因为不允许这样的语法:usecols=[1:]

【问题讨论】:

  • 请放一些虚拟样本数据并使用pandas读取数据文件
  • “我需要使用numpy.loadtxt”——不,你不需要。还有更厉害的numpy.genfromtxt
  • @heltonbiker, genfromtxt 需要相同类型的 usecols 输入。
  • [1:] 仅允许在索引上下文中使用。它不是range 表达式。使用np.arange(1,10) 或您需要多少列。基本上usecols 需要一个列号列表。没有all-but-the-first 快捷方式。
  • loadtxtgenfromtxt 都使用默认的 float dtyype 加载。但是genfromtxtnan 放在它无法将字符串转换为浮点数的地方,而loadtxt 会引发错误。因此,您可以加载所有列,然后进行 data[:,1:] 提取。

标签: python numpy


【解决方案1】:

不要让numpy.loadtxt() 选择列,只需将它们全部加载,然后对结果数组进行切片以删除第一列:

data = np.loadtxt(open(path_to_data, "rb"), delimiter=",", skiprows=1)[:,1:]

那么你不需要知道n 的值,即列数,所有内容都在一行上。

如果您在将字符串转换为浮点数时遇到问题,则可以转换 dtype

例如

data = data.astype('float64')

【讨论】:

    【解决方案2】:

    这是语法错误:

    In [153]: [1:]
      File "<ipython-input-153-4bac19319341>", line 1
        [1:]
          ^
    SyntaxError: invalid syntax
    

    它并不特定于loadtxt

    使用

    data = np.loadtxt(open(path_to_data, "rb"), delimiter=",", skiprows=1, usecols=np.arange(1,n))
    

    其中n 是总列数。

    usecols : int or sequence, optional
        Which columns to read, with 0 being the first. For example,
        ``usecols = (1,4,5)`` will extract the 2nd, 5th and 6th columns.
        The default, None, results in all columns being read.
    

    如果您不知道n,并且不想使用初步文件读取来确定它,genfromtxt 可能更容易。

    data = np.genfromtxt(..., delimiter=',', skiprows=1)
    

    应该加载所有列,将nan 放在它无法将字符串转换为浮点数的地方。如果那些nan都在第一列,那么

    data = data[:,1:]
    

    应该给你除了第一列之外的所有内容。

    genfromtxt 在将字符串转换为浮点数时更加宽容。

    【讨论】:

    • 我知道,但是如何获得这个n
    猜你喜欢
    • 2021-09-12
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    相关资源
    最近更新 更多