繁体   English   中英

每年在两个日期之间提取数据

[英]Extract data between two dates each year

我有一个2000年至2015年的每日数据时间序列。我想要的是另一个单一时间序列,它仅包含4月15日至6月15日之间的每年数据(因为这是与我的分析有关的时期)。 我已经编写了一个代码来自己做同样的事情,如下所示:

import pandas as pd
df = pd.read_table(myfilename, delimiter=",", parse_dates=['Date'], na_values=-99)
dff = df[df['Date'].apply(lambda x: x.month>=4 and x.month<=6)]
dff = dff[dff['Date'].apply(lambda x: x.day>=15 if x.month==4 else True)]
dff = dff[dff['Date'].apply(lambda x: x.day<=15 if x.month==6 else True)]

我认为此代码效率太低,因为它必须对数据帧执行3次操作才能获得所需的子集。

我想知道以下两件事:

  1. 是否有内置的熊猫功能来实现这一目标?
  2. 如果不是,是否有更有效,更好的方法来实现这一目标?

尝试这个:

index = pd.date_range("2000/01/01", "2016/01/01")
s = index.to_series()
s[(s.dt.month * 100 + s.dt.day).between(415, 615)]

让数据框看起来像这样:

df = pd.DataFrame({'Date': pd.date_range('2000-01-01', periods=365*10, freq='D'),
                   'Value': np.random.random(365*10)})

创建年份设置为相同值的一系列日期

x = df.Date.apply(lambda x: pd.datetime(2000,x.month, x.day))

使用该系列进行过滤以从数据框中选择

df.values[(x >= pd.datetime(2000,4,15)) & (x <= pd.datetime(2000,6,15))]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM