我有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次操作才能获得所需的子集。
我想知道以下两件事:
答案 0 :(得分: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)]
答案 1 :(得分:2)
让数据框看起来像这样:
import re
import pandas as pd
df= pd.read_csv('C:/Users/Desktop/items.csv')
p = re.compile(r'(?<=\s+|")\d+(?!\w+)')
df.rate.apply(lambda x: re.findall(p, x))
创建一系列日期,并将年份设置为相同的值
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))