date_range不接受我想要使用的变量?

时间:2015-11-25 16:22:43

标签: python pandas

当我输入类似' 2015-08'的值时,我的date_range按预期工作。如果我使用startdate变量,那么它不再有效?我无法弄清楚为什么会这样。

我得到的错误是"无法将输入转换为时间戳"

1 个答案:

答案 0 :(得分:0)

不是分数。我有点困惑,不是你在做什么基本上只是以下几个?

代码:

from datetime import datetime, timedelta

now = datetime.now()
print now.strftime("%Y-%m")
month_ago = now.replace(day=1) - timedelta(days = 1)
print month_ago.strftime("%Y-%m")
months_ago = month_ago.replace(day=1) - timedelta(days = 1)
print months_ago.strftime("%Y-%m")

输出:

2015-11
2015-10
2015-09

以上可能不是完美的答案,但你可以用datetime取代now,它基本上会给你当前和最后两个月。当然,根据需要进行调整。

编辑:

您甚至可以更进一步,只需创建一个功能,允许您指定返回的月数或使用自定义日期。

from datetime import datetime, timedelta

def last_n_months(num_of_months, start_date=datetime.now(), include_curr=True):
    f = "%Y-%m"
    curr = start_date
    if include_curr:
        yield curr.strftime(f)
    for num in range(num_of_months):
        curr = curr.replace(day=1) - timedelta(days=1)
        yield curr.strftime(f)

# This month and last 12 months.
print [m for m in last_n_months(12)]
# ['2015-11', '2015-10', '2015-09', '2015-08', '2015-07', '2015-06', '2015-05', '2015-04', '2015-03', '2015-02', '2015-01', '2014-12', '2014-11']

# Last 12 months only.
print [m for m in last_n_months(12, include_curr=False)]
# ['2015-10', '2015-09', '2015-08', '2015-07', '2015-06', '2015-05', '2015-04', '2015-03', '2015-02', '2015-01', '2014-12', '2014-11']    

# Last 12 months from custom date, exclude custom date.
d = datetime(2012, 6, 1)
print [m for m in last_n_months(12, d, False)]
# ['2012-05', '2012-04', '2012-03', '2012-02', '2012-01', '2011-12', '2011-11', '2011-10', '2011-09', '2011-08', '2011-07', '2011-06']