预建索引的数据清理结果

2024-03-28 07:56:35 发布

您现在位置:Python中文网/ 问答频道 /正文

目标:

创建一个索引以容纳csv文件中预先存在的一组价格数据。我可以使用列表理解构建索引。如果这样做的话,这个结构会给我一个长度为86772的过滤列表——在1/3/2007-8/30/2012上运行42次(即10分钟间隔)。然而,我的价格数据来自csv的长度:62034。请注意,长度的差异是由于数据清理问题造成的。你知道吗

也就是说,我不知道如何克服真实数据和这个预构建(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对象,该对象的日期成分等于给定的date对象的日期成分,其时间成分等于给定的time对象的日期成分。

  2. 当我分析日期时,是不是把时间和日期放在一起,把它当作一个“日期”?

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

回溯错误:

AttributeError: 'unicode' object has no attribute 'date'


Tags: 文件csv数据对象列表datadatetimedate
1条回答
网友
1楼 · 发布于 2024-03-28 07:56:35

你可以这样写:

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

其中价格.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

相关问题 更多 >