1

客观的:

创建一个索引来容纳来自 csv 文件的一组预先存在的价格数据。我可以使用列表推导建立索引。如果以这种方式完成,构造将给我一个长度为 86,772 的过滤列表——当运行 1/3/2007-8/30/2012 42 次(即 10 分钟间隔)时。但是,我来自 csv 的价格数据是长度:62,034。请注意,长度的差异是由于数据清理问题造成的。

也就是说,我不确定如何克服真实数据和这个预先构建的(列表组合)数据框之间明显的不匹配。

试图:

我是否错误地使用了前两行?

data=pd.read_csv('___.csv', parse_dates={'datetime':[0,1]}).set_index('datetime')

dt_index = pd.DatetimeIndex([datetime.combine(i.date,i.time) for i in data.index])

ts = pd.Series(data.prices.values, dt_index)

问题:

  1. 据我了解,我应该使用“组合”,因为我希望索引构造完全由我的 csv 文件通知。并且,“组合”返回一个新的日期时间对象,其日期分量等于给定日期对象的日期分量,其时间分量等于给定时间对象的时间分量。

  2. 当我 parse_dates 时,它是否将时间和日期混为一谈并将其视为“日期”?

  3. 有没有更好的方法来实现既定目标?

回溯错误:

AttributeError:“unicode”对象没有属性“日期”

4

1 回答 1

2

你可以整齐地写如下:

ts = df1.prices

这是一个例子:

In [1]: df = pd.read_csv('prices.csv',
                  parse_dates={'datetime': [0,1]}).set_index('datetime')

In [2]: df # dataframe
Out[2]: 
                    prices  duty
datetime                 
2012-11-12 10:00:00      1     0
2012-12-12 10:00:00      2     0
2012-12-12 10:00:00      3     1


In [3]: df.prices # timeseries
Out[3]: 
datetime
2012-11-12 10:00:00    1
2012-12-12 10:00:00    2
2012-12-12 11:00:00    3
Name: prices

In [4]: ts = df.prices

您可以像这样分组日期(类似于文档中的这个示例):

In [5]: key = lambda x: x.date()

In [6]: df.groupby(key).sum()
Out[6]: 
            prices  duty
2012-11-12       1     0
2012-12-12       5     1

In [7]: ts.groupby(key).sum()
Out[7]: 
2012-11-12    1
2012-12-12    5

其中price.csv包含:

date,time,prices,duty
11/12/2012,10:00,1,0
12/12/2012,10:00,2,0
12/12/2012,11:00,3,1
于 2012-12-11T21:46:32.007 回答