使用python仅汇总timeseries中的非NaN数据
我需要每日值的总和,但只从天开始,不包含NaN值。我的csv文件包含半小时的数据,但有时测量设备会出现故障。我需要每天的总和,但一旦它包含一个NaN值,我不希望它,总结这一天。 我的Csv文件如下所示:使用python仅汇总timeseries中的非NaN数据,python,sum,pandas,time-series,nan,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
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')
有人知道怎么做吗?如果我理解正确,您希望过滤掉包含NaN的任何日期的所有数据,然后使用完整的、无NaN的数据集对这些日期求和 为了简单起见,使用
squence
关键字将其设置为一个系列,而不是一个数据帧。(这不是必需的,但它使后面的内容更直接一些。)
要过滤掉任何NaN的天数
complete_days_only = et.groupby(lambda x: x.date).filter(lambda x: ~x.isnull().any())
现在重新采样
complete_days_only.resample('D', how='sum')
在这种情况下,我认为您需要使用:
ts.dropna()
?实际上我不知道熊猫,但它看起来像是一个可以使用的工具。你可以尝试将nan转换为0,然后进行汇总。谢谢你的回答!但是我得到了错误:如果我在“pd.read.csv…”行中删除“parse_dates=[[['date','time']]”,则会出现错误:AttributeError:'str'对象没有属性'date'。如果我不删除它,则会出现错误:AttributeError:“SeriesGroupBy”对象没有属性“filter”。SeriesGroupBy
没有属性filter
“表示您使用的是没有筛选器的旧版本的pandas。如果可以,请更新熊猫的安装;否则,请使用transform
仔细阅读我的旧答案,寻找解决方法。(我在这里回答了很多过滤问题。)
complete_days_only.resample('D', how='sum')