【发布时间】:2015-11-08 20:23:45
【问题描述】:
我是使用 python pandas 的新手,并且使用以下脚本从 excel 文件中提取时间序列数据,设置日期 = 索引,然后希望对按日期引用的数据执行各种计算。脚本:
df = pd.read_excel("myfile.xls")
df = df.set_index(df.Date)
df = df.drop("Date",1)
df.index.name = None
df.head()
输出(让您了解数据)是:
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
当我尝试根据df.loc['20150806'] 之类的日期检索数据时,它有效,但是当我尝试检索df.loc['20150806':'20150812'] 之类的切片时,我返回Empty DataFrame。
同样,索引是一个 DateTimeIndex,dtype = 'datetime64[ns]', length = 1412, freq = None, tz = None
就像我说的,我的最终目标是能够按日、月、年、不同时期等对数据进行分组,并对数据进行计算。我想给出这个上下文,但我什至不想在这里讨论,因为我显然停留在更基本的东西上——也许误解了如何使用 DateTimeIndex 进行操作
谢谢。
编辑:还包括,我认为我引用索引的主要问题与 freq=0, bc 当我尝试使用连续日期系列的更简单示例时,我没有这个问题。
【问题讨论】:
-
你的索引没有排序,或者至少是减少而不是增加。这就是切片返回空数据帧的原因(帧中的 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样式切片。
标签: python-3.x pandas dataframe python-datetime