Python 如何删除熊猫(.resample)计算的一些每周平均值?
我有一个数据集,需要计算每日平均值和每周平均值。我知道这可以由熊猫来完成。以下是我到目前为止拥有的数据和代码Python 如何删除熊猫(.resample)计算的一些每周平均值?,python,pandas,mean,resampling,Python,Pandas,Mean,Resampling,我有一个数据集,需要计算每日平均值和每周平均值。我知道这可以由熊猫来完成。以下是我到目前为止拥有的数据和代码 date T1 T2 T3 12/17/13 00:28:38 19 23.1 7.3 12/17/13 00:58:38 19 22.9 7.3 12/17/13 01:28:38 18.9 22.8 6.3 12/17/13 01:58:38 18.9 23.1
date T1 T2 T3
12/17/13 00:28:38 19 23.1 7.3
12/17/13 00:58:38 19 22.9 7.3
12/17/13 01:28:38 18.9 22.8 6.3
12/17/13 01:58:38 18.9 23.1 6.3
12/17/13 02:28:38 18.8 23 6.3
12/17/13 02:58:38 18.8 22.9 6.3
.......
12/18/13 00:28:07 19.5 22.4 5.3
12/18/13 00:58:08 19.4 22.3 5.3
12/18/13 01:28:07 19.4 22.1 5.3
.......
3/22/14 16:55:18 17.7 20.6 10.1
3/22/14 17:08:31 17.7 20.6 10.1
3/22/14 17:26:04 17.6 20.5 8
3/22/14 17:56:04 17.7 20.5 7
到目前为止,我掌握的密码是
import pandas as pd
Temp=pd.read_csv("Book1.csv",parse_dates=['date'])
Temp=Temp.set_index('date')
In [25]: Temp_plot.head()
Temp_plot=Temp.resample('W',how='mean')
Temp_plot.head()
Out[25]:
T1 T2 T3
date
2013-12-22 18.740345 35.055517 7.532414
2013-12-29 14.501770 14.950442 6.497935
2014-01-05 13.135207 14.064793 7.795858
2014-01-12 17.296154 38.503550 7.827219
2014-01-19 18.217699 38.892625 6.952212
现在的问题是,我必须删除一些每周平均值,这些值是假日,不应包含在结果平均值中。我是否应该有一个列表,其中包含不应包含的日期,然后比较Temp_图中的值
编辑
我已经添加了一个列表Wase=[“2013-12-22”,“2014-01-05”]
,如评论中所建议,并使用了Temp\u plot1=Temp\u plot.drop(Wase)
,现在我得到了任何错误,即axis中不包含ValueError:labels['2013-12-22''2014-01-05']。
知道如何删除这个错误吗?因为我必须删除列表中包含日期的行 您需要使用dt.date(年、月、日)
创建假日日历。然后使用列表理解结构从索引中筛选假期,如下所示。最后,您可以使用.ix
选择这些过滤后的日期,它根据索引值从数据框中选择数据
import datetime as dt
holidays = [dt.date(2015, 12, 25), ...]
idx = [timestamp for timestamp in Temp.index if timestamp.date() not in holidays]
Temp_plot = Temp.ix[idx].resample('W', how='mean')
您需要使用dt.date(年、月、日)
创建假日日历。然后使用列表理解结构从索引中筛选假期,如下所示。最后,您可以使用.ix
选择这些过滤后的日期,它根据索引值从数据框中选择数据
import datetime as dt
holidays = [dt.date(2015, 12, 25), ...]
idx = [timestamp for timestamp in Temp.index if timestamp.date() not in holidays]
Temp_plot = Temp.ix[idx].resample('W', how='mean')
如果您有一个要排除的日期容器(例如,列表
),比如说,不需要的日期
,您只需执行Temp\u plot.drop(不需要的日期)
。注意:这将返回一个排除了所需日期的视图,实际上不会改变Temp\u plot
。要永久删除它们,请执行Temp\u plot=Temp\u plot.drop(不需要的日期)
或Temp\u plot.drop(不需要的日期,inplace=True)
@JoeCondron我曾尝试过这样做,但给出了一个错误ValueError:axis中不包含标签['2013-12-22''2014-01-05']。你知道为什么会发生这种情况吗?如果你的数据在假期中没有任何观察结果,那么它们无论如何都不包括在平均值中。如果您的数据中确实有假日,则应在重新采样之前将其删除。此外,您可以在读取csv文件时设置索引:pd.read\u csv(“Book1.csv”,parse\u dates=['date'],index\u col='date')
@Alexander数据确实包含假日,应将假日从数据中删除。如果我必须在重新采样之前删除它,那么将有这么多行,这将很困难。我不能按照@JoeCondron的建议删除它们吗?如果您有一个容器(例如,列表
),其中包含要排除的日期,比如说,不需要的日期
,您可以执行临时绘图。删除(不需要的日期)
。注意:这将返回一个排除了所需日期的视图,实际上不会改变Temp\u plot
。要永久删除它们,请执行Temp\u plot=Temp\u plot.drop(不需要的日期)
或Temp\u plot.drop(不需要的日期,inplace=True)
@JoeCondron我曾尝试过这样做,但给出了一个错误ValueError:axis中不包含标签['2013-12-22''2014-01-05']。你知道为什么会发生这种情况吗?如果你的数据在假期中没有任何观察结果,那么它们无论如何都不包括在平均值中。如果您的数据中确实有假日,则应在重新采样之前将其删除。此外,您可以在读取csv文件时设置索引:pd.read\u csv(“Book1.csv”,parse\u dates=['date'],index\u col='date')
@Alexander数据确实包含假日,应将假日从数据中删除。如果我必须在重新采样之前删除它,那么将有这么多行,这将很困难。我不能按照@JoeCondron的建议把它们扔掉吗?谢谢你的时间,但它不起作用。我已经添加了holidays=[dt.date(2013,12,17),(2013,12,18),(2013,12,19),(2013,12,20),(2013,12,21),(2013,12,22)]
Temp=Temp.set_index('date')
和您的idx=…
和Temp_plot=…
一样的行,但它给出的结果与之前相同,这意味着假期不会被删除。我也试着每天取样,然后每周取样,但这不会给我任何不同的结果。谢谢你的帮助。因为。。。?错误是什么。我猜是你约会的方式。什么是类型(Temp.index.iat[0])
?文件中的日期格式为12/17/13 00:28:38 M/D/Y和HH:MM:YY。没有错误。我必须将其更改为2013-12-22吗?您需要为假期中的每个日期指定日期(…)。或者您可以这样做:holidays=[dt.date(d[0],d[1],d[2]),用于[(2013,12,18),(2013,12,19),(2013,12,20),(2013,12,21),(2013,12,22)]
。另外,我使用您的示例数据尝试了代码,它对我有效。谢谢您的时间,但它不起作用。我已经添加了holidays=[dt.date(2013,12,17),(2013,12,18),(2013,12,19),(2013,12,20),(2013,12,21),(2013,12,22)]
Temp=Temp.set_index('date')
和您的idx=…
和Temp_plot=…
一样的行,但它给出的结果与之前相同,这意味着假期不会被删除。我也试着每天取样,然后每周取样,但这不会给我任何不同的结果。谢谢你的帮助。因为。。。?错误是什么。我猜是你约会的方式。什么是类型(Temp.index.iat[0])
?文件中的日期格式为12/17/13 00:28:38 M/D/Y和HH:MM:YY。没有错误。我必须将其更改为2013-12-22吗?您需要为假期中的每个日期指定日期(…)。或者您可以这样做:holidays=[dt.date(d[0],d[1],d[2]),用于[(2013,12,18),(2013,12,19),(2013,12,20),(2013,12,21),(2013,12,22)]
。此外,我还尝试了u代码