如何在Pandas中计算以月为单位的Timedelta

如何在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:

如何在Pandas中计算以月为单位的Timedelta?

# 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)
Python

输出:

如何在Pandas中计算以月为单位的Timedelta?

方法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)
Python

输出:

如何在Pandas中计算以月为单位的Timedelta?

例子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)
Python

输出:

如何在Pandas中计算以月为单位的Timedelta?

方法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']))
Python

输出:

0     6
1    12
dtype: int64
Python

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Pandas 日期时间

登录

注册