为什么date_range的结果与索引DataFrame Pandas日期的[]不同?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么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获取特定时间范围吗?

答案

[因为我是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'))

要获得以熊猫为单位的特定日期或时间范围,最简单的方法就是简单的括号表示法。例如,要获取2013年1月4日至2013年1月8日(含)之间的日期,只需输入以下内容:

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方法具有更大的灵活性。如果需要,此表示法还可用于日期时间。

以上是关于为什么date_range的结果与索引DataFrame Pandas日期的[]不同?的主要内容,如果未能解决你的问题,请参考以下文章

使用 date_range 重新索引时间戳数据

pandas使用datetime创建示例dataframe:包含完整的时分秒信息创建时间索引使用不同的时间频率date_range中参数freq的偏移量别名

pandas使用date_range函数按照指定的频率(freq)和指定的个数(periods)生成dataframe的时间格式数据列基于dataframe的日期数据列生成日期索引

如何将函数应用于日期索引的 DataFrame

pandas索引的设置与修改

Pandas 的整数索引重采样等价物