Python 月减去月

Python 月减去月,python,pandas,Python,Pandas,我正在尝试在月数中获取下面日期1和日期2之间的月数。结果就是2016-12减去2016-5,即7。我只知道如何以整数计算天数,有人能教我如何以MTH计算结果,即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')) 您可以将日期转换为月份,然后

我正在尝试在月数中获取下面日期1和日期2之间的月数。结果就是2016-12减去2016-5,即7。我只知道如何以整数计算天数,有人能教我如何以MTH计算结果,即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'))

您可以将日期转换为月份,然后执行减法:

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

如果你不在乎一个月内的哪一天,你可以这样做:

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

月不是一个标准单位。如果你假设每月30天,你可以这样做
(date1-date2)。days/30
你的所有日期都在同一年吗?我的日期是不同的年份,我在想如果有一个sql等价物“datediff(month,date1,date2)”,这对列有效吗?我在dataframe中对2列使用了上述内容,并得到以下错误AttributeError:“Index”对象没有“to_period”属性这确实适用于列,但您需要首先确保这些列是datetime类型,如果不是,请使用
pd.to_datetime()
进行转换。另外,处理datetime列(需要
.dt
访问器)的方法不同于datetime索引。