python - 在时间序列数据框中选择一小时的数据

标签 python pandas time-series

我在根据小时选择数据框中的数据时遇到问题。

我有一个月的数据,这些数据以 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

我确信这应该很容易并且与重新采样有关。问题是我不想对数据做任何事情,只需选择数据框(随后将其关联起来)

干杯

最佳答案

除非您想聚合为每日值(例如总和、最大值、中位数),否则您无需对数据重新采样

如果您只想要特定一天的数据,您可以使用 .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而不是相反。

关于python - 在时间序列数据框中选择一小时的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20271492/

相关文章:

python - DataFrame和Series之间如何进行逻辑运算?

javascript - 如何正确地为 D3 Dimple 中的不同线条和线条系列分配单独的颜色?

python - 使用以每小时时间序列作为输入的 LSTM 预测每日值(value)

python - 循环 Python 中的 ARIMA 预测

python - 如何从 Pandas 数据框中选择有序的分类列?

python - 使用 python 从不同长度的元组列表中删除重复项

python - 整数值之间的条件前向填充

python - pandas dataframe - 根据唯一用户对艺术家进行分组

python - Pandas 根据另一列的条件有选择地覆盖列中的值

python - 按小时过滤 DataFrame 行