2017-02-27 257 views
0

大家好我有一个cvs文件,其中包含每小时一次的数据数据。我需要在整个月的12:00 am-3:00am的时间间隔内获得其中一列的平均值。我正在使用pandas.DataFrame来尝试执行此操作。Python代码在特定时间段内在月度数据中的平均值

数据的样品我使用

DateTime current  voltage 
11/1/2014 12:00 1.122061402 4.058617834 
11/1/2014 1:00 1.120534925 4.060912132 
11/1/2014 2:00 1.119349897 4.058656072 
11/1/2014 3:00 1.118277733 4.060912132 
11/1/2014 4:00 1.120365636 4.060912132 
11/1/2014 5:00 1.120365636 4.060912132 

我想从12 am-3am平均每天2列整月。我想在时间上使用条件语句是一个很好的选择,但是我不确定如何在日期/时间数据上实现条件语句。

+1

'df ['DateTime']。resample('3H')。mean()'? –

+0

如果我实现了3H意味着每3小时的数据就会给我意味着什么。我想在整个月的上午12点到上午3点的时间段内获得这个意思。 – acb

+1

假设'DateTime'是索引会工作吗? 'df.between_time('12:00','3:00')。resample('3H')。mean()' –

回答

1

我将假定您已经将该文件导入名为df的Pandas数据框。你的“日期时间”字段被大熊猫通过检查df.dtypes值确认为一个DateTime

  1. 确认。如果不是,重铸例如搭配:

    df['DateTime'] = pd.to_datetime(df['DateTime'])

  2. 仔细检查,像上午12点,下午1点,等次被妥善处理。 (你没有在你的数据集中指出任何东西来区分上午12点和下午12点等)。如果没有,你将需要设计一个合适的方法来纠正它们或者从原始源重新导出它们。

  3. 从DateTime字段创建DatetimeIndex:

    df = df.set_index(pd.DatetimeIndex(df['DateTime']))

  4. 现在采取梅德的建议(少许修改):

    >>> df.between_time('0:00', '3:00').resample('1D').mean()

结果的指数将显示时间间隔的开始被平均。

编辑时考虑了评论中的新信息。

+0

谢谢你这个作品。无论如何只能在数据中的某些列上执行df.between_time?我也可以将这些值保存到列表中吗? – acb

+0

确定的事情:尝试'list(df ['current']。between_time('0:00','3:00')。resample('1D')。mean())'只获取平均当前值例如,该时间框架。 – mewahl