选择两个日期之间的数据帧行

我正在从csv创建数据帧,如下所示:

stock=pd.read\u csv(/'+filename+'.csv'中的数据,skipinitialspace=True)

DataFrame有一个日期列。有没有办法创建一个新的数据框(或只覆盖现有的数据框),其中只包含日期值在指定日期范围内或在两个指定日期值之间的行

有两种可能的解决方案:

  • 使用布尔掩码,然后使用df.loc[mask]
  • 将日期列设置为DatetimeIndex,然后使用df[开始日期:结束日期]

使用布尔掩码

确保df['date']是一个数据类型为datetime64[ns]的系列:

df['date']=pd.to_datetime(df['date'])

制作一个布尔掩码start\u dateend\u date可以是datetime.datetimes,
np.datetime64s、pd.Timestamps,甚至日期时间字符串:

#大于开始日期,小于结束日期
掩码=(df['date']>开始日期)&(df['date']<=结束日期)

选择子数据帧:

df.loc[掩码]

或重新分配给df

df=df.loc[mask]

比如说,

将numpy作为np导入
作为pd进口熊猫
df=pd.DataFrame(np.random.random((200,3)))
df['date']=pd.日期范围('2000-1-1',周期=200,频率=D')
掩码=(df['date']>'2000-6-1')&(df['date']<='2000-6-10')
打印(df.loc[掩码])

屈服

0 1 2日期
153  0.208875  0.727656  0.037787 2000-06-02
154  0.750800  0.776498  0.237716 2000-06-03
155  0.812008  0.127338  0.397240 2000-06-04
156  0.639937  0.207359  0.533527 2000-06-05
157  0.416998  0.845658  0.872826 2000-06-06
158  0.440069  0.338690  0.847545 2000-06-07
159  0.202354  0.624833  0.740254 2000-06-08
160  0.465746  0.080888  0.155452 2000-06-09
161  0.858232  0.190321  0.432574 2000-06-10

使用日期时间索引

如果要按日期进行大量选择,则设置日期可能会更快
date列作为第一个索引。然后,您可以使用按日期选择行
df.loc[开始日期:结束日期]

将numpy作为np导入
作为pd进口熊猫
df=pd.DataFrame(np.random.random((200,3)))
df['date']=pd.日期范围('2000-1-1',周期=200,频率=D')
df=df.set_索引(['date'])
打印(测向位置['2000-6-1':'2000-6-10']

屈服

0 1 2
日期
2000-06-01 0.040457 0.326594 0.492136包括开始日期
2000-06-02  0.279323  0.877446  0.464523
2000-06-03  0.328068  0.837669  0.608559
2000-06-04  0.107959  0.678297  0.517435
2000-06-05  0.131555  0.418380  0.025725
2000-06-06  0.999961  0.619517  0.206108
2000-06-07  0.129270  0.024533  0.154769
2000-06-08  0.441010  0.741781  0.470402
2000-06-09  0.682101  0.375660  0.009916
2000-06-10  0.754488  0.352293  0.339337

Python列表索引,例如seq[start:end]包括start,但不包括end,相反,Pandasdf.loc[start\u date:end\u date]包含两个端点(如果它们在索引中)。但是,索引中不必包含开始日期结束日期


还要注意,pd.read\u csv有一个parse\u dates参数,您可以使用该参数将date列解析为datetime64s。因此,如果使用parse_dates,则不需要使用df['date']=pd.to_datetime(df['date'])

发表评论