首页 > 解决方案 > 为什么 date_range 给出的结果与 DataFrame Pandas 日期的索引 [] 不同?

问题描述

date_range这是我在 Pandas 中使用的带有索引 [ ]的简单代码

period_start = '2013-01-01'
period_end = '2019-12-24'

print(pd.DataFrame ({'close':aapl_close,
        'returns':aapl_returns},index=pd.date_range(start=period_start,periods=6)))

print(pd.DataFrame ({'close':aapl_close,
            'returns':aapl_returns})[period_start:'20130110'])

date_range给出 Nan 结果

            close  returns
2013-01-01    NaN      NaN
2013-01-02    NaN      NaN
2013-01-03    NaN      NaN
2013-01-04    NaN      NaN

索引给出正确的结果

                            close   returns
2013-01-02 00:00:00+00:00  68.732  0.028322
2013-01-03 00:00:00+00:00  68.032 -0.010184
2013-01-04 00:00:00+00:00  66.091 -0.028531

根据日期的显示方式date_range- 我想日期格式date_range与 Pandas DataFrame 中的日期格式不匹配。

1)你能解释一下为什么它给出NaN吗?

2) 你会建议从 Panda DataFrame 中获取特定时间范围吗?

标签: pythonpandasdataframe

解决方案


由于我是 Python 及其库的初学者,我不明白这个问题指的是 Quantopian 库,而不是 Pandas。

我在他们的论坛上找到了解决方案。Quantopian 上的方法返回的所有时间都是时区感知的,时区为“UTC”。默认情况下,date_range 方法返回时区初始日期。只需将时区信息提供给 date_range 方法。像这样

pd.DataFrame ({  
'close':aapl_close,  
'returns':aapl_returns,},  
index=pd.date_range(start=period_start, periods=6, tz='UTC'))

要在 pandas 中获取特定的日期或时间范围,最简单的方法可能是简单的括号表示法。例如,要获取 2013-01-04 和 2013-01-08(含)之间的日期,只需输入以下内容:

df = pd.DataFrame ({'close':aapl_close,  'returns':aapl_returns,})  
my_selected_dates = df['2013-01-04':'2013-01-08']

这个括号表示法实际上是使用 loc 方法的简写

my_selected_dates = df.loc['2013-01-04':'2013-01-08']

两者的工作方式相同,但 loc 方法具有更多的灵活性。如果需要,此表示法也适用于日期时间。


推荐阅读