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

How to convert datetime to timestamp and calculate difference between dates using lambda function

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

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

我试过使用 relativedelta 来计算月差,但我不确定如何使用 pandas 系列来实现它。

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 和系列中所有日期之间的月份差异。

由于我没有您的原始 csv,因此我编写了一些示例数据,希望能够大大缩短您的代码:

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

然后,借助这个 得到合适的 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))