2016-12-17 152 views
4

我試圖在月份之間得到date1和date2之間的月數。結果只是簡單的2016-12減去2016-5,這是7.我只知道如何得到int的日子,有人教我如何得到結果在多個月,這是7?減去月份的月份

import pandas as pd 
import numpy as np 

date1=pd.to_datetime('2016-12-1') 
date2=pd.to_datetime('2016-5-27') 

print((date1-date2)/np.timedelta64(1,'D')) 
+0

月是不是一個標準的單位。如果你假設每月30天,你可以這樣做'(date1 - date2).days/30' – ayhan

+0

你所有的日期是在同一年嗎? – doctorlove

+0

我的日期是不同的年份,我在想如果有一個相當於'datediff(月,日期1,日期2)的SQL' – unclegood

回答

5

您可以轉換的日期個月期然後做減法:

date1.to_period("M") - date2.to_period("M") 
# 7 
+0

這是否適用於列?我用上面的2列在我的數據幀,並得到了以下錯誤AttributeError的:「索引」對象有沒有屬性「to_period」 – unclegood

+1

這並不適用於列,但你需要確保這些列的datetime型的,首先,如果不,使用'pd.to_datetime()'進行轉換。另外,處理日期時間列(需要'.dt'訪問器)的方式與日期時間索引不同。 – Psidom

+0

是的,它工作後,我添加.dt,謝謝! – unclegood

2

如果你不關心的一個月內的日子,你可以這樣做:

在同一個月內,例如
date1.year * 12 + date1.month - (date2.year * 12 + date2.month) 

日期「2016年12月31日」和「2016年12月1日」,會給你0

如果你想佔個月內的一天,你可以計算出經過一個月的分數,直到給定天。例如。如果一個月有30天,那麼第一天的分數是0/30,而最後一天的分數是29/30。 該代碼段將做到這一點:

from calendar import monthrange 

def get_frac_of_month(date): 
    # monthrange returns a tuple where the second entry is the number of days in the month 
    return 1. * (date.day - 1)/monthrange(date.year, date.month)[1] 

def get_month_diff(date1, date2): 
    return date1.year * 12 + date1.month + get_frac_of_month(date1) - (date2.year * 12 + date2.month + get_frac_of_month(date2)) 

print get_month_diff(date1, date2) 

的輸出中會

6.16129032258