Python 3.x 以Python格式按日期范围索引
我不熟悉使用python pandas,并使用下面的脚本从excel文件中提取时间序列数据,设置dates=索引,然后希望对按日期引用的数据执行各种计算。脚本: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'],这是有
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