【问题标题】:Index by date ranges in Python PandasPython Pandas 中的按日期范围索引
【发布时间】: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


【解决方案1】:

df.loc['2015-08-12':'2015-08-10']df.loc['2015-08-10':'2015-08-12':-1] 都可以。 df = df.sort_index() 并按照我尝试的方式进行切片也可以。谢谢你们。我想是因为那里的树木而错过了森林。

【讨论】:

    猜你喜欢
    • 2019-02-17
    • 1970-01-01
    • 2015-01-31
    • 2023-01-17
    • 1970-01-01
    • 2012-11-06
    • 2020-12-14
    • 2012-02-26
    • 2018-12-30
    相关资源
    最近更新 更多