用python总结时间序列中的非NaN数据

时间:2013-08-16 18:26:45

标签: python sum pandas time-series nan

我需要每日价值的总和,但仅限于天数,不包含NaN值。我的csv文件包含半小时数据,但有时,测量设备会失败。我需要每日总和但是只要它含有NaN值,我就不想要它,总结这一天。  我的Csv文件看起来像这样:

date        time       ET
28. Nov 01  08:15   -0.00152
28. Nov 01  08:45   -0.00324
28. Nov 01  09:15   0.00805
28. Nov 01  09:45   0.00684
28. Nov 01  10:15   0.00918
28. Nov 01  10:45   
28. Nov 01  11:15   0.00867
28. Nov 01  11:45   0.01014
28. Nov 01  12:15   0.01697
28. Nov 01  12:45   0.00739

在这一天是一个缺失值,所以我不想要这一天的总和,但是对于所有其他具有所有测量值的天数。

我目前的代码是:

import pandas as pd
ts = pd.read_csv('C:\Python27\Scripts\ET_T_2000.csv', sep=';', parse_dates=[['date', 'time']])
ts.fillna(0)
ts1 = ts.set_index('date_time')['ET'].resample('D', how='sum')

有人知道怎么做吗?

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望过滤掉包含NaN的任何日期的所有数据,然后将天数与完整的无NaN数据集相加。

为简单起见,请使用squeeze关键字将其设为系列而非数据框架。 (这不是必不可少的,但是它会使得更直接的东西。)

et = pd.read_csv(..., index_col=0, squeeze=True)

使用任何NaN过滤日期

complete_days_only = et.groupby(lambda x: x.date).filter(lambda x: ~x.isnull().any())

现在重新取样

complete_days_only.resample('D', how='sum')

答案 1 :(得分:0)

在这种情况下,我认为你想使用:

ts.dropna()