Python Pandas 索引排序/分组/日期时间
Posted
技术标签:
【中文标题】Python Pandas 索引排序/分组/日期时间【英文标题】:Python Pandas Index Sorting/Grouping/DateTime 【发布时间】: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
是另一种选择,但对于更深奥的格式,strptime
和 apply
可以创造奇迹。
@TheLaughingMan to_datetime
也有一个 format
参数,所以你应该(几乎)能够用它做任何你会用 strptime
做的事情
【参考方案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
这应该让排序恢复到时间顺序
【讨论】:
以上是关于Python Pandas 索引排序/分组/日期时间的主要内容,如果未能解决你的问题,请参考以下文章
Python Pandas:按日期分组,并按时间戳访问每个组
Python Pandas:将日期时间列分组为小时和分钟聚合