预建索引的数据清理后果

时间:2012-12-11 21:34:20

标签: python pandas time-series

目标:

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

那就是说,我不知道如何克服真实数据和这个预建(list comp)数据帧之间的明显不匹配。

尝试:

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

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. 根据我的理解,我应该使用'combine',因为 我希望索引构造完全由我的csv文件提供 。并且,'combine'返回一个新的datetime对象,其日期组件等于给定的日期对象,并且其时间组件等于给定的时间对象。

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

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

  4. 追踪错误:

      

    AttributeError:'unicode'对象没有属性'date'

1 个答案:

答案 0 :(得分: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

您可以像这样分组日期(类似于this example from the docs):

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

prices.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