【问题标题】:Python Pandas Index Sorting/Grouping/DateTimePython Pandas 索引排序/分组/日期时间
【发布时间】:2015-03-27 13:48:50
【问题描述】:

我正在尝试使用一分钟数据组合 2 个单独的数据系列来创建一个比率,然后为全天的比率创建开高低收 (OHLC) 文件。我引入了两个时间序列,然后使用 pandas 创建关联的数据框。时间序列缺少数据,因此我在每个文件中创建一个 datetime 变量,然后在 datetime 变量上使用 pd.merge 方法合并文件。在这一点上,一切都很顺利。

接下来我使用 groupby 按日期对数据进行分组。然后,我将分组的数据提供给一个 for 循环,该循环计算 OHLC 并将其提供给每一天的新数据帧。但是,新填充的数据框使用日期(来自分组)作为数据框索引并且排序关闭。索引数据如下所示(即使已排序):

2013 年 1 月 29 日 2014 年 1 月 29 日 2015 年 1 月 29 日 2013 年 12 月 2 日 2014 年 12 月 2 日

简而言之,排序只在月份而不是整个日期作为日期进行,因此它不是按时间顺序排列的。我的目标是按日期对其进行排序,以便按时间顺序排列。也许我需要在引用索引的数据框中创建一个新列(不确定如何)。或者也许有一种方法可以告诉 pandas 索引是一个日期而不仅仅是一个值?我尝试使用包括 sort_index 在内的各种排序方法,但由于日期是索引并且似乎不被视为日期,因此排序函数按月排序,无论年份如何,因此我的输出文件出现故障。更笼统地说,我不确定如何引用/操作 pandas 数据框中的实际唯一标识符索引,因此任何相关材料都会很有用。

谢谢

【问题讨论】:

  • 我一直在处理 OHLC 源的 CSI 导出,这始终是个问题。这是因为日期是字符串。您必须使用 datetime.datetime.strptime 解析它们并将它们转换为正确的 Python datetime 对象,以便 pandas 可以正确检测它们并相应地对它们进行排序。
  • 你看s.resample('1D', how="ohlc")了吗?这应该将您的系列重新采样为每日值并自动计算 OHLC 列。并查看pd.to_datetime 将您的字符串转换为真实日期。
  • 同意@joris。 to_datetime 是另一种选择,但对于更深奥的格式,strptimeapply 可以创造奇迹。
  • @TheLaughingMan to_datetime 也有一个 format 参数,所以你应该(几乎)能够用它做任何你会用 strptime 做的事情

标签: python sorting datetime pandas


【解决方案1】:

几年后...

这解决了问题。

df 是一个数据框

import pandas as pd
df.index = pd.to_datetime(df.index) #convert the index to a datetime object
df = df.sort_index() #sort the converted 

这应该让排序恢复到时间顺序

【讨论】:

    猜你喜欢
    • 2021-02-18
    • 1970-01-01
    • 2017-08-13
    • 2017-01-03
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2014-03-07
    • 2018-10-30
    相关资源
    最近更新 更多