python - Pandas 中的日期范围

标签 python pandas datetime time-series

在与 NumPy 和 dateutil 斗争了几天之后,我最近发现了神奇的 Pandas 库。我一直在研究文档和源代码,但我不知道如何让 date_range() 在正确的断点处生成索引。

from datetime import date
import pandas as pd

start = date('2012-01-15')
end = date('2012-09-20')
# 'M' is month-end, instead I need same-day-of-month
date_range(start, end, freq='M')

我想要什么:

2012-01-15
2012-02-15
2012-03-15
...
2012-09-15

我得到了什么:

2012-01-31
2012-02-29
2012-03-31
...
2012-08-31

我需要一个月大小的 block 来说明一个月中的可变天数。这可以通过 dateutil.rrule 实现:

rrule(freq=MONTHLY, dtstart=start, bymonthday=(start.day, -1), bysetpos=1)

丑陋且难以辨认,但它有效。我怎么能用 Pandas 做到这一点?我玩过 date_range()period_range(),到目前为止都没有运气。

我的实际目标是使用 groupbycrosstab 和/或 resample 根据 sums/means/etc 计算每个时期的值期间内的个别条目。换句话说,我想从以下位置转换数据:

                total
2012-01-10 00:01    50
2012-01-15 01:01    55
2012-03-11 00:01    60
2012-04-28 00:01    80

#Hypothetical usage
dataframe.resample('total', how='sum', freq='M', start='2012-01-09', end='2012-04-15') 

                total
2012-01-09          105 # Values summed
2012-02-09          0   # Missing from dataframe
2012-03-09          60
2012-04-09          0   # Data past end date, not counted

鉴于 Pandas 最初是一种财务分析工具,我几乎可以肯定有一种简单快捷的方法可以做到这一点。感谢您的帮助!

最佳答案

freq='M' 用于月末频率(参见 here )。但是您可以使用 .shift 将其移动任意天数(或任何频率):

pd.date_range(start, end, freq='M').shift(15, freq=pd.datetools.day)

关于python - Pandas 中的日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445174/

相关文章:

c++ - 使用 boost::date_time 库以毫秒为单位格式化时间

python - lxc容器中的 Selenium ; WebDriver异常: Message: invalid argument: can't kill an exited process

python ndarray 在特定索引处执行 A[ :, ... , l, .. :]

python - Folium map 无法在 github 上的笔记本中呈现

python - 为什么 Pandas 和 R 之间数据帧的内存使用量有如此大的差异?

python - SciKit Gradient Boosting - 如何将预测与初始表结合起来?

python - 以哈希形式将密码存储在 MySQL 数据库中 Django App

python - 拆分没有 str 属性的 pandas 列对象

python - datetime.replace 从根本上被破坏了吗?

ruby-on-rails - Rails - 18 年前在表单中设置 date_select