2

我正在尝试使用以下格式的 OHLC 数据加载 csv 文件。

In [49]: !head '500008.csv'
03 Jan 2000,12.85,13.11,12.74,13.11,976500,,,,
04 Jan 2000,13.54,13.60,12.56,13.33,2493000,,,,
05 Jan 2000,12.68,13.34,12.37,12.68,1680000,,,,
06 Jan 2000,12.60,13.30,12.27,12.34,2800500,,,,
07 Jan 2000,12.53,12.70,11.82,12.57,2763000,,,,
10 Jan 2000,13.58,13.58,13.58,13.58,13500,,,,
11 Jan 2000,14.66,14.66,13.40,13.47,1694220,,,,
12 Jan 2000,13.66,13.99,13.20,13.54,519164,,,,
13 Jan 2000,13.67,13.87,13.54,13.80,278400,,,,
14 Jan 2000,13.84,13.99,13.30,13.50,718814,,,,

我尝试了以下加载数据的方法。

df = read_csv('500008.csv', parse_dates=[0,1,2], usecols=range(6), 
                            header=None, index_col=0)

但现在我想命名要命名的列。所以,我试过了,

df = read_csv('500008.csv', parse_dates=[0,1,2], usecols=range(6),
                            header=None, index_col=0, names='d o h l c v'.split())

但这没有说,

IndexError: list index out of range

有人可以指出我做错了什么吗?

4

2 回答 2

5

我不知道它是错误还是功能,但即使您只指定了列的子集,您也必须为所有列指定名称usecols

df = pd.read_csv(StringIO(raw),
                 parse_dates=True,
                 header=None,
                 index_col=0,
                 usecols=[0,1,2,3,4,5],
                 names='0 1 2 3 4 5 6 7 8 9'.split())

这使

                1      2      3      4        5
0                                              
2000-01-03  12.85  13.11  12.74  13.11   976500
2000-01-04  13.54  13.60  12.56  13.33  2493000
2000-01-05  12.68  13.34  12.37  12.68  1680000

我通过尝试为两者指定完整列表的极端情况来解决这个问题,names然后usecols尝试逐渐减少并查看会发生什么。

奇怪的是您在尝试时收到的错误消息,usecols=[1,2,3]例如names=['1','2','3']

ValueError: Passed header names mismatches usecols

这没有意义……

于 2013-01-12T22:09:51.383 回答
0

这是一个错误。我遇到了同样的问题,想出了两个解决方法,并提交了一个拉取请求来修复它。

于 2013-12-24T01:05:54.263 回答