You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas日期列表转换失败:无法计算连续日期差值问题

解决Pandas日期列表转datetime并计算连续差值的问题

错误原因分析

你遇到的AttributeError是因为目标列date_str中的元素并非字符串,而是numpy数组或Python列表,strip()是字符串专属方法,数组/列表没有这个属性,因此调用报错。TypeError大概率是变量名冲突(比如误将apply当成变量赋值),或是lambda表达式内操作逻辑错误导致。

解决方案步骤

1. 将日期列表中每个字符串转为datetime对象

假设date_str列的每个元素是日期字符串组成的列表/数组,需逐个转换每个日期字符串:

import pandas as pd
import datetime
import numpy as np

# 示例数据
data = {'id': [1], 'date_str': [['2021-04', '2021-11', '2022-04', '2022-10']]}
df = pd.DataFrame(data)

# 转换每个日期列表为datetime对象列表
df['date_objs'] = df['date_str'].apply(lambda x: [datetime.datetime.strptime(d, '%Y-%m') for d in x])

2. 计算连续日期的月份差值

有两种常用方式计算差值,按需选择:

方法1:按平均天数换算近似月份差(适合粗略计算)

def calculate_month_diff(date_list):
    if len(date_list) < 2:
        return []  # 列表长度不足2时返回空列表
    diffs = np.diff(date_list)
    # 按每月平均30.44天换算月份差
    month_diffs = [round(d.days / 30.44, 1) for d in diffs]
    return month_diffs

df['month_diffs'] = df['date_objs'].apply(calculate_month_diff)

方法2:用relativedelta计算精确月份差(推荐)

先安装依赖:pip install python-dateutil,再执行代码:

from dateutil.relativedelta import relativedelta

def calculate_exact_month_diff(date_list):
    if len(date_list) < 2:
        return []
    month_diffs = []
    for i in range(1, len(date_list)):
        delta = relativedelta(date_list[i], date_list[i-1])
        month_diffs.append(delta.years * 12 + delta.months)
    return month_diffs

df['exact_month_diffs'] = df['date_objs'].apply(calculate_exact_month_diff)

最终结果示例

针对示例数据,exact_month_diffs列会得到[7, 5, 6],完全匹配日期间的实际月份差。

内容的提问来源于stack exchange,提问作者Mile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:53:18