如何使用lambda函数将日期时间转换为时间戳并计算日期之间的差异

时间:2019-08-22 13:45:06

标签: python pandas python-2.7 python-datetime

我需要将我创建的变量从日期时间转换为时间戳。

我需要它以时间戳格式对我的熊猫系列执行lambda函数,该函数存储为datetime64。 lambda函数应该可以找到startDate和整个熊猫系列之间几个月之间的差异。请帮忙吗?

我尝试使用relativedelta来计算月份差异,但是我不确定如何用熊猫系列来实现。

from datetime import datetime 
import pandas as pd
from dateutil.relativedelta  import relativedelta as rd

#open the data set and store in the series ('df')
file = pd.read_csv("test_data.csv")
df = pd.DataFrame(file)

#extract column "AccountOpenedDate into a data frame"
open_date_data = pd.Series.to_datetime(df['AccountOpenedDate'], format = '%Y/%m/%d')

#set the variable startDate
dateformat = '%Y/%m/%d %H:%M:%S'
set_date  = datetime.strptime('2017/07/01 00:00:00',dateformat)
startDate = datetime.timestamp(set_date)

#This function calculates the difference in months between two dates: ignore 

def month_delta(start_date, end_date):
    delta = rd(end_date, start_date)
    # >>> relativedelta(years=+2, months=+3, days=+28)
    return 12 * delta.years + delta.months

d1 = datetime(2017, 7, 1)
d2 = datetime(2019, 10, 29)
total_months = month_delta(d1, d2)

# Apply a lambda function to each row by adding 5 to each value in each column
dfobj = open_date_data.apply(lambda x: x + startDate)
print(dfobj) 

我只使用加载的数据集中的一列。它是以下格式的日期列(“%Y /%m /%d%H:%M:%S”)。我想找到startDate和系列中所有日期之间的月份差异。

1 个答案:

答案 0 :(得分:0)

由于我没有您的原始csv,因此我整理了一些示例数据,并希望设法大大缩短您的代码:

open_date_data = pd.Series(pd.date_range('2017/07/01', periods=10, freq='M')) 
startDate = pd.Timestamp("2017/07/01")

然后,在此answer的帮助下获得适当的month_diff公式:

def month_diff(a, b):
    return 12 * (a.year - b.year) + (a.month - b.month)

open_date_data.apply(lambda x: month_diff(x, startDate))