簡體   English   中英

計算數據框中具有空值的兩列的日期時間差

[英]Calculate date time difference of two columns with null value in dataframe

我有一個如下數據框:

    startdate   terminationdate
0   1997-07-13  2004-09-29
1   1999-07-26  2016-03-23
2   2003-04-01  NaT
3   2007-06-01  NaT
4   2009-06-01  NaT

我想獲得輸出以幾個月為單位計算使用期限。 對於終止日期中的空值,我想使用當前日期進行計算。

我嘗試了下面的代碼:


def tenure(df):

    if df['terminationdate'] != np.nan:
        tenure = (df['terminationdate'] - df['startdate'])/np.timedelta64(1, 'M')

    else:
        tenure = (datetime.datetime.now() - df['startdate'])/np.timedelta64(1, 'M')
    return tenure

使用上述代碼無法計算NaT值的使用期限。

您可以使用fillnaterminationdate fillna中的NaT替換為當前的NaT

tenure = (df['terminationdate'].fillna(datetime.datetime.today()) - df['startdate'])/
          np.timedelta64(1, 'M')

嘗試使用pd.to_datetime()將列轉換為日期
使用np.where和datetime.datetime.now()。date填充當前日期
最后應用您的差異公式

import pandas as pd
import numpy as np
import datetime

df['startdate'] = pd.to_datetime(df['startdate']).dt.date
df['terminationdate'] = pd.to_datetime(df['terminationdate']).dt.date

df['terminationdate'] = np.where(df['terminationdate'].isnull(),
                                datetime.datetime.now().date(),
                                df['terminationdate'])

df['result'] = (df['terminationdate'] - df['startdate'])/np.timedelta64(1, 'M')

tawab_shakeel的答案有效。 如果要在數據集中保留null並遵循邏輯,則可以對每個原始數據使用apply函數

from datetime import datetime
import pandas as pd
import numpy as np

df = pd.DataFrame({'startdate': pd.to_datetime(['1997-07-13', '1999-07-26', '2003-04-01', '2007-06-01', '2009-06-01']),
                   'terminationdate': pd.to_datetime(['2004-09-29', '2016-03-23', None, None, None])})

def tenure(start_date, end_date):
    if pd.isna(end_date) == False:
        tenure = (end_date - start_date)/np.timedelta64(1, 'M')
    else: 
        tenure = (datetime.now() - start_date)/np.timedelta64(1, 'M')
    return tenure

tenure_month = df.apply(lambda row: tenure(row['startdate'], row['terminationdate']), axis = 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM