目标:
创建一个索引,以容纳来自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)
问题:
根据我的理解,我应该使用'combine',因为 我希望索引构造完全由我的csv文件提供 。并且,'combine'返回一个新的datetime对象,其日期组件等于给定的日期对象,并且其时间组件等于给定的时间对象。
当我解析时,它是否将时间和日期混为一谈并将其视为“约会”?
有没有更好的方法来实现既定目标?
追踪错误:
AttributeError:'unicode'对象没有属性'date'
答案 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