在loadtxt中使用usecols

时间:2012-12-06 21:32:00

标签: python numpy

我在多个问题中发现了这个错误,但没有修复或解释 防爆。 Reading in single str column with loadtxt

我对以下行(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上查看了很多其他问题但是没有回答

1 个答案:

答案 0 :(得分:4)

如果您想将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)

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,)
                        )

也可以。