usecols与parse_dates和名称

时间:2013-01-12 21:07:30

标签: python pandas

我正在尝试使用以下格式加载带有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

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

2 个答案:

答案 0 :(得分:4)

我不知道它是一个错误还是一个功能,但您必须为所有列指定名称,即使您只指定了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

我通过尝试为namesusecols指定完整列表的边缘情况来尝试这一点,然后尝试逐渐减少并查看会发生什么。

我们在尝试实例usecols=[1,2,3]names=['1','2','3']时收到的错误消息是什么:

ValueError: Passed header names mismatches usecols

这没有意义......

答案 1 :(得分:0)

这是bug。我有same problem并提出了two workarounds并提交了pull request来修复它。