0

我在多个问题中发现了这个错误,但它不是固定的或解释的。使用 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,))

有以下数据

ticker  year    month   day
GPD.TO  2010    8   16
HAO.V   2010    8   16
RDS.V   2010    8   16
MD.V    2010    8   16

它给了我一个

IndexError: list index out of range

当我在没有它的情况下运行该行时,usecols它可以正常工作并返回所有 4 列。

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

4

1 回答 1

5

如果你想使用usecols = (0,)withnp.loadtxt那么你必须改变dtype匹配:

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

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

产量

[('GPD.TO',) ('HAO.V',) ('RDS.V',) ('MD.V',)]

或者,np.genfromtxt您不需要更改dtype

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

也可以。

于 2012-12-06T21:43:17.300 回答