我在依赖于一小时的数据框中选择数据时遇到了问题。
我有一个月的数据,每隔10分钟增加一次。
我希望能够在每个小时的特定日期为每小时选择数据(创建另一个数据帧)。但是,我在创建表达式时遇到了问题。
这就是我选择这一天的方式:
x=all_data.resample('D').index
for day in range(20):
c=x.day[day]
d=x.month[day]
print data['%(a)s-%(b)s-2009' %{'a':c, 'b':d} ]
但是,如果我这样做了一个小时,它将无法正常工作。
x=data['04-09-2009'].resample('H').index
for hour in range(8):
daydata=data['4-9-2009 %(a)s' %{'a':x.hour[hour]}]
我收到错误:
raise KeyError('no item named %s' % com.pprint_thing(item))
KeyError: u'no item named 4-9-2009 0'
这是真的,因为格式为dd / mm / yyy hh:mm:ss
我确信这应该很简单并且与重新采样有关。麻烦的是我不想对dat做任何事情,只需选择数据框(以后再关联)
干杯
答案 0 :(得分:1)
除非您想要汇总到每日价值(例如,总和,最大值,中位数),否则您无需重新取样数据
如果您只想要特定日期的数据,可以使用以下.loc
属性示例开始:
import numpy
import pandas
N = 3700
data = numpy.random.normal(size=N)
time = pandas.DatetimeIndex(freq='10T', start='2013-02-15 14:30', periods=N)
ts = pandas.Series(data=data, index=time)
ts.loc['2013-02-16']
在时间序列中使用.loc
的好处在于,您可以根据需要使用日期作为一般或特定。所以对于特定的一小时,你会说:
ts.loc['2013-02-16 13'] # notice that i didn't put any minutes in there
同样,你可以用:
整整一个月ts.loc['2013-02']
您使用字符串格式设置的问题是您使用0
手动填充字符串。因此,如果您有一个2位数小时(即下午),您最终得到一个3位数的小时表示(这是无效的)。因此,如果我想循环一段特定的时间,我会这样做:
hours = [2, 7, 12, 22]
for hr in hours:
print(ts.loc['2013-02-16 {0:02d}'.format(hr)])
02d
格式字符串告诉python从digit
(整数)构造一个至少两个字符宽的字符串,并填充左侧0
的字符串必要。此外,您可能需要将日期格式设置为YYYY-mm-dd
,而不是相反。