Python 3.x 以Python格式按日期范围索引

Python 3.x 以Python格式按日期范围索引,python-3.x,pandas,dataframe,python-datetime,Python 3.x,Pandas,Dataframe,Python Datetime,我不熟悉使用python pandas,并使用下面的脚本从excel文件中提取时间序列数据,设置dates=索引,然后希望对按日期引用的数据执行各种计算。脚本: df = pd.read_excel("myfile.xls") df = df.set_index(df.Date) df = df.drop("Date",1) df.index.name = None df.head() 其输出(让您了解数据)为: 当我尝试基于一个日期检索数据时,如df.loc['20150806'],这是有

我不熟悉使用python pandas,并使用下面的脚本从excel文件中提取时间序列数据,设置dates=索引,然后希望对按日期引用的数据执行各种计算。脚本:

df  = pd.read_excel("myfile.xls")
df = df.set_index(df.Date)
df = df.drop("Date",1)
df.index.name = None
df.head()
其输出(让您了解数据)为:

当我尝试基于一个日期检索数据时,如
df.loc['20150806']
,这是有效的,但当我尝试检索一个切片时,如
df.loc['20150806':'20150812']
我返回
空数据帧

同样,该索引是一个DateTimeIndex,其dtype='datetime64[ns]',length=1412,freq=None,tz=None

正如我所说,我的最终目标是能够按天、月、年、不同时期等对数据进行分组,并对数据执行计算。我想给出这个上下文,但我甚至不想在这里讨论这个问题,因为我显然停留在一些更基本的东西上——可能是误解了如何使用DateTimeIndex

多谢各位


编辑:也包括,我认为我引用的索引的主要问题与freq=0有关,bc当我尝试使用连续日期序列的更简单示例时,我没有这个问题

df.loc['2015-08-12':'2015-08-10']
df.loc['2015-08-10':'2015-08-12':-1]
这两种方法都有效
df=df.sort_index()
和我尝试的切片方式也能起作用。谢谢大家。我想是因为那里的树木而错过了森林

您的索引没有排序,或者至少是在减少而不是增加。这就是切片返回空数据帧的原因(8月12日在帧中8月6日之前)尝试
df=df.sort_index()
,然后再次尝试切片。扩展@joris的建议,您也可以通过以下两种方式之一反转顺序进行切片:
df.loc['2015-08-12':'2015-08-10']
df.loc['2015-08-10':'2015-08-12':-1]
但是如果没有明确的排序(当然这是一个很好的建议),也不一定意味着切片的结果会被排序。你实际上是在做一个
iloc
样式的切片。
              Px1      Px2     Px3   Px4     Px5       Px6         Px7    
2015-08-12  19.850000  10.25  7.88  10.90  109.349998  106.650002  208.830002
2015-08-11  19.549999  10.16  7.81  10.88  109.419998  106.690002  208.660004
2015-08-10  19.260000  10.07  7.73  10.79  109.059998  105.989998  210.630005
2015-08-07  19.240000  10.08  7.69  10.92  109.199997  106.430000  207.919998
2015-08-06  19.250000  10.09  7.76  10.96  109.010002  106.010002  208.350006