如何在Pandas中计算以月为单位的Timedelta
两个日期或时间之间的差异被表示为一个timedelta对象。持续时间描述了两个日期、日期时间或时间发生的差异,而delta意味着差异的平均值。人们可以通过使用timedelta来估计未来和过去的时间。这种两个日期之间的差异如果以月为单位计算,就叫做以月为单位的时间三角洲。让我们来演示一下在pandas中计算月的时间差的几种方法。
方法1:使用pandas.Series.dt.to_period()函数计算Timedelta
pandas.Series.dt.to_period() 函数:
语法:
Series.dt.to_period(*args, kwargs)
将日期时间数组转换为周期数组。
参数 :
freq= 可选值,偏移字符串或偏移对象
在这个例子中,我们读取time.csv,并将每一列的值转换为DateTime。在将各列转换为DateTime后,我们使用pandas.Series.dt.to_period()来计算以月为单位的时间差。to_period()函数中的’M’字符串象征着月份。月末对象被返回。
使用的CSV:
# import packages and libraries
import pandas as pd
# reading the csv file
data = pd.read_csv('time.csv')
# converting columns to datetime
data['start_date'] = pd.to_datetime(data['start_date'])
data['end_date'] = pd.to_datetime(data['end_date'])
# calculating time delta in months
data['time_delta_months'] = data['end_date'].dt.to_period('M') - \
data['start_date'].dt.to_period('M')
print(data)
输出:
方法2:使用整数的月份计算Temedelta
在前面的方法中,Monthends对象被返回。如果我们想让它变成整数,我们必须使用astype()函数或者使用view(dtype=’int64′)来转换。
# import packages and libraries
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# reading the csv file
data = pd.read_csv('time.csv')
# converting columns to datetime
data['start_date'] = pd.to_datetime(data['start_date'])
data['end_date'] = pd.to_datetime(data['end_date'])
# calculating time delta in months
data['time_delta_months'] = data['end_date'].dt.to_period('M').astype(int) - \
data['start_date'].dt.to_period('M').astype(int)
# print(data)
print(data)
输出:
例子2:使用.view(dtype=’int64′)转换为整数。
# import packages and libraries
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# reading the csv file
data = pd.read_csv('time.csv')
# converting columns to datetime
data['start_date'] = pd.to_datetime(data['start_date'])
data['end_date'] = pd.to_datetime(data['end_date'])
# calculating time delta in months
data['time_delta_months'] = data['end_date'].dt.to_period('M').view(dtype='int64') -\
data['start_date'].dt.to_period('M').view(dtype='int64')
# print(data)
print(data)
输出:
方法3:使用用户定义的函数计算Timedelta
我们可以不使用内置函数,而是使用自己的用户定义函数pd.Timestamp()函数将DateTIME-like、str、int或float时间对象转换为时间戳。然后我们从时间戳中提取年和月的值。由于每年有12个月,我们用12乘以年差,再加上月差。
# import packages and libraries
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# creating a dataframe
data = pd.DataFrame({'startdate': [pd.Timestamp('20181211'),
pd.Timestamp('20180701')],
'enddate': [pd.Timestamp('20190612'),
pd.Timestamp('20190712')]})
def time_delta_month(end, start):
return 12 * (end.dt.year - start.dt.year) \
+ (end.dt.month - start.dt.month)
print(time_delta_month(data['enddate'], data['startdate']))
输出:
0 6
1 12
dtype: int64