【问题标题】:How to get number of days between two dates using pandas如何使用熊猫获取两个日期之间的天数
【发布时间】:2026-01-08 01:10:01
【问题描述】:

我正在尝试使用以下函数获取两个日期之间的天数

df['date'] = pd.to_datetime(df.date)

# Creating a function that returns the number of days
def calculate_days(date):
    today = pd.Timestamp('today')
    return today - date

# Apply the function to the column date
df['days'] = df['date'].apply(lambda x: calculate_days(x))

结果是这样的

153 天 10:16:46.294037

但我希望它说 153。我该如何处理?

【问题讨论】:

    标签: python pandas datetime python-datetime


    【解决方案1】:

    为了提高性能,您可以减去没有apply 的值以避免循环使用Series.rsub 从右侧减去:

    df['date'] = pd.to_datetime(df.date)
    df['days'] = df['date'].rsub(pd.Timestamp('today')).dt.days
    

    工作原理:

    df['days'] = (pd.Timestamp('today') - df['date']).dt.days
    

    如果想使用您的解决方案:

    df['date'] = pd.to_datetime(df.date)
    
    def calculate_days(date):
        today = pd.Timestamp('today')
        return (today - date).days
    
    df['days'] = df['date'].apply(lambda x: calculate_days(x))
    

    或者:

    df['date'] = pd.to_datetime(df.date)
    
    def calculate_days(date):
        today = pd.Timestamp('today')
        return (today - date)
    
    df['days'] = df['date'].apply(lambda x: calculate_days(x)).dt.days
    

    【讨论】:

    • 我尝试了较短的代码df['days'] = df['date'].sub(pd.Timestamp('today')).dt.days,但得到了错误TypeError: unsupported operand type(s) for -: 'numpy.ndarray' and 'Timestamp'
    • @ShadowWalker _ 有使用过df['date'] = pd.to_datetime(df.date) 吗?顺便说一句,你的熊猫版本是什么?
    • 我更正了一个错字,但结果为负值。我尝试更改为pd.Timestamp('today').sub(df['date']).dt.days,但出现错误Timestamp has no attribute sub
    • @ShadowWalker - 抱歉,这是我的错字,需要rsub,答案已编辑。
    【解决方案2】:
    df['date'] = pd.to_datetime(df.date)
    

    a) 熊猫

    (pd.Timestamp("today") - df.date).days
    

    b) 这个 numpy 构建函数允许您选择一个星期掩码

     np.busday_count(df.date.date(), pd.Timestamp("today").date(), weekmask=[1,1,1,1,1,1,1])
    

    【讨论】: