【发布时间】:2014-08-20 15:41:26
【问题描述】:
我想获取时间序列数据,并计算每个工作日(周一、周二……)的平均行数。我的数据是这样的:
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。我做错了什么?
【问题讨论】:
-
什么版本?似乎在 0.14.1/py2.7/Windows 上工作正常。你能显示
tdata.info() -
@chrisb 我能够在 pandas 0.14.1/py2.7/Linux 上重现 OP 的问题。
-
完全不要使用 dateutil 解析器;它有各种奇怪的东西
-
@chrisb 0.12.0/py2.7.5/os x 小牛
<class 'pandas.core.frame.DataFrame'> -
@Jeff dateutil 解析器是问题所在。我升级到 0.14.1,但没有帮助。删除 dateutil 代码修复了 0.14.1 上的问题。
标签: python pandas time-series