Skip to main content
 首页 » 编程设计

python/pandas 使用变量正确实现 df.loc

2025年05月04日13birdshome

目前我有一个名为

的变量
Date: "2016-07-01" 

我正在努力使我目前拥有的数据框在给定日期开始。我目前使用的方法是:

given base df with many dates and prices at the time, 
 
dfmain = df.loc[Date:] 

然而,当我打印输出时,它实际上只是从索引 202 开始:

Index    Date      Price   
202  2008-11-21    37.88 
203  2008-11-28    42.70  
204  2008-12-05    48.28  
205  2008-12-12    51.34  
206  2008-12-19    51.30  
207  2008-12-26    51.78  #etc... 

当我将 Date 更改为 2076-01-02 之类的东西时,它从索引 208 开始。我想知道是否有一种方法可以实现它,所以它需要完整的日期并从那里开始,而不是 df.loc 计算日期的前三个数字并将其设置为起始索引。

请您参考如下方法:

我认为首先需要按 Date 列将 set_index 设置为 DateTimeindex,以便按标签选择 DataFrame.loc :

print (df.index) 
Int64Index([202, 203, 204, 205, 206, 207], dtype='int64', name='Index') 

#if necessary convert to datetime 
#df['Date'] = pd.to_datetime(df['Date']) 
df = df.set_index('Date') 
 
print (df.index) 
DatetimeIndex(['2008-11-21', '2008-11-28', '2008-12-05', '2008-12-12', 
               '2008-12-19', '2008-12-26'], 
              dtype='datetime64[ns]', name='Date', freq=None) 
 
Date =  "2008-12-01" 
 
dfmain = df.loc[Date:] 
print (dfmain) 
            Price 
Date              
2008-12-05  48.28 
2008-12-12  51.34 
2008-12-19  51.30 
2008-12-26  51.78 

另一个解决方案应该是使用 boolean indexing或 query :

Date =  "2008-12-01" 
 
dfmain = df[df['Date'] >= Date] 

#dfmain = df.query('Date >= @Date') 
print (dfmain) 
            Date  Price 
Index                   
204   2008-12-05  48.28 
205   2008-12-12  51.34 
206   2008-12-19  51.30 
207   2008-12-26  51.78