loadtxt中的usecols

rod*_*ing 0 python numpy

我在多个问题中发现此错误,但它不是固定的,也不是解释性的。使用loadtxt在单个str列中读取

我对以下行(import numpy as np)有问题

    symbols = np.loadtxt('filename.csv',
               dtype={'names': ('ticker', 'year', 'month','day'),
                      'formats': ('S10','i4','i2','i2')},
                delimiter=',',skiprows=1, usecols=(0,))
Run Code Online (Sandbox Code Playgroud)

具有以下数据

ticker  year    month   day
GPD.TO  2010    8   16
HAO.V   2010    8   16
RDS.V   2010    8   16
MD.V    2010    8   16
Run Code Online (Sandbox Code Playgroud)

它给了我一个

IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

当我在没有该行的情况下usecols正常运行并返回所有4列正常。

我在Google和Stackoverflow上查看了许多其他问题,但这没有得到回答

unu*_*tbu 5

如果要与使用usecols = (0,)np.loadtxt则必须更改dtype以匹配:

import numpy as np
symbols = np.loadtxt('filename.csv',
                     dtype={'names': ('ticker', ),
                            'formats': ('S10',)},
                     delimiter=',',
                     skiprows=1,
                     usecols=(0,)
                     )
print(symbols)
Run Code Online (Sandbox Code Playgroud)

filename.csv

ticker,year,month,day
GPD.TO,2010,8,16
HAO.V,2010,8,16
RDS.V,2010,8,16
MD.V,2010,8,16
Run Code Online (Sandbox Code Playgroud)

产量

[('GPD.TO',) ('HAO.V',) ('RDS.V',) ('MD.V',)]
Run Code Online (Sandbox Code Playgroud)

或者,np.genfromtxt您无需更改dtype

symbols = np.genfromtxt('filename.csv',
                        dtype={'names': ('ticker', 'year', 'month','day'),
                               'formats': ('S10','i4','i2','i2')},                        
                        delimiter=',',
                        skiprows=1,
                        usecols=(0,)
                        )
Run Code Online (Sandbox Code Playgroud)

也可以。

  • 这是正确的,但我认为它需要更清楚一些。他已经在第0列(`S10`)中使用了正确的`dtype`。问题在于,他的`dtype'形状与他预期的结果不同-他为4列数组指定了'dtype',然后尝试仅读取其中的1列。 (2认同)