我想获取timeseries数据,并计算每个工作日(星期一、星期二,…)的平均行数。我的数据是这样的:
timestamp maxCapacity
Mon Aug 4 14:47:00 EDT 2014 6741
Mon Aug 4 14:48:01 EDT 2014 6741
为了实现这一点,我首先通过时间戳对数据文件进行索引。然后通过从时间戳索引获取工作日来创建一个新列。但是,新列没有正确分配工作日编号。
这是产生问题的代码。
import wget, pandas, csv
from dateutil import parser
url = 'https://www.dropbox.com/s/kbti3i8uzy82hw6/maxCapacity?dl=1'
dataFile = 'maxCapacitySample'
if not os.path.exists(dataFile):
wget.download(url, out=dataFile)
parse = lambda x: parser.parse(x)
tdata = pandas.read_csv(dataFile,
parse_dates={"Datetime":['timestamp',]},
index_col='Datetime',
keep_date_col=False,
date_parser=parse,
dialect=csv.excel_tab)
tdata['weekday'] = tdata.index.weekday
print tdata.head()
输出
maxCapacity weekday
Datetime
2014-08-04 14:40:00-04:00 6741 0
2014-08-04 14:47:00-04:00 6741 3
2014-08-04 14:48:01-04:00 6741 3
2014-08-04 14:49:00-04:00 6741 3
2014-08-04 14:50:00-04:00 6741 3
这里的问题是同一天(第4天)被映射到工作日0和3。我做错什么了?
最佳答案
我通过以下途径找到了解决办法:
tdata['weekday'] = pandas.to_datetime(tdata.index.values).weekday
生成的数据帧是:
maxCapacity weekday
Datetime
2014-08-04 14:40:00-04:00 6741 0
2014-08-04 14:47:00-04:00 6741 0
2014-08-04 14:48:01-04:00 6741 0
2014-08-04 14:49:00-04:00 6741 0
2014-08-04 14:50:00-04:00 6741 0
2014-08-04 14:51:00-04:00 6741 0
2014-08-04 14:52:00-04:00 6741 0
2014-08-04 14:53:00-04:00 6741 0
2014-08-04 14:54:00-04:00 6741 0
2014-08-04 14:55:00-04:00 6741 0
... ... ...
2014-08-20 09:37:00-04:00 6652 2
2014-08-20 09:38:00-04:00 6654 2
2014-08-20 09:39:00-04:00 6651 2
2014-08-20 09:40:00-04:00 6642 2
2014-08-20 09:41:00-04:00 6648 2
2014-08-20 09:42:00-04:00 6654 2
2014-08-20 09:43:00-04:00 6646 2
2014-08-20 09:44:00-04:00 6659 2
2014-08-20 09:45:00-04:00 6650 2
2014-08-20 09:46:00-04:00 6655 2
[6589 rows x 2 columns]
关于python - Python的 Pandas 给DatetimeIndex提供了错误的工作日索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25408994/