大家好,我有一个cvs文件,每小时一次包含数月的数据。我需要在整个月的12:00 am-3:00am的时间间隔内获得其中一列的平均值。我正在使用pandas.DataFrame来尝试这样做。
我正在使用的数据样本
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点到凌晨3点将第2列平均化。我想在时间上使用条件语句是一个不错的选择但是我不确定如何在日期/时间数据上实现该条件语句。
答案 0 :(得分:1)
我假设您已将文件导入名为df
的Pandas数据框。
通过检查df.dtypes
的值,确认您的“DateTime”字段被pandas识别为DateTime。如果没有,重铸,例如用:
df['DateTime'] = pd.to_datetime(df['DateTime'])
仔细检查正确处理上午12点,下午1点等的时间。 (您没有在数据集中指出要区分12 AM到12 PM等的任何内容。)如果没有,您需要设计一个合适的方法来纠正它们或从原始来源重新导出它们。
从DateTime字段创建DatetimeIndex:
df = df.set_index(pd.DatetimeIndex(df['DateTime']))
现在接受德米特里的建议(轻微修改):
>>> df.between_time('0:00', '3:00').resample('1D').mean()
结果的索引将显示平均时间间隔的开始。
编辑以考虑评论中的新信息。