2024-04-27 15:44:15 发布
网友
我有一个如下的数据帧:
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
我想用月来计算任期。对于terminationdate中的null值,我希望使用当前日期来计算。在
我尝试了以下代码:
无法使用上述代码计算NaT值的保留期。在
塔瓦布·沙克尔的回答是正确的。如果希望在数据集中保留null并遵循逻辑,可以对每个raw使用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)
您只需使用fillna将terminationdate中的NaT替换为当前的:
fillna
terminationdate
NaT
tenure = (df['terminationdate'].fillna(datetime.datetime.today()) - df['startdate'])/ np.timedelta64(1, 'M')
尝试使用将列转换为日期pd.to_日期时间() 使用填充当前日期np.哪里以及日期时间。日期时间。现在().日期 最后应用你的差分公式
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')
塔瓦布·沙克尔的回答是正确的。如果希望在数据集中保留null并遵循逻辑,可以对每个raw使用apply函数
您只需使用
fillna
将terminationdate
中的NaT
替换为当前的:尝试使用将列转换为日期pd.to_日期时间()
使用填充当前日期np.哪里以及日期时间。日期时间。现在().日期
最后应用你的差分公式
相关问题 更多 >
编程相关推荐