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

Pandas中如何将<X * Days>格式数据提取为整数?

解决思路与实现方法

你的报错原因很明确:dt 访问器只能用于datetime/timedelta类型的标量元素,但你的列里每个单元格是列表对象,所以直接调用.dt.days完全不适用。以下是针对这类列表数据的处理方案:

方法一:正则表达式提取数字(通用字符串场景)

如果列表中的元素是类似 <36 * Days> 的字符串格式,用正则提取数字是最稳妥的方式:

import re
import pandas as pd

# 定义处理单个列表的函数
def extract_day_numbers(td_list):
    # 遍历列表每个元素,提取其中的数字并转整数
    return [int(re.search(r"\d+", str(item)).group()) for item in td_list]

# 应用到目标列
df["tdColumn"] = df["tdColumn"].apply(extract_day_numbers)

处理后,列中每个列表会变成 [36, 23] 这样的整数列表,后续计算均值可以直接用:

# 新增均值列,空列表返回None避免报错
df["mean_days"] = df["tdColumn"].apply(lambda x: sum(x)/len(x) if x else None)

方法二:转换为Timedelta对象提取天数(针对timedelta字符串表示)

如果列表中的元素本质是pandas.Timedelta对象的字符串打印形式(比如直接输出就是<36 * Days>),可以先转换为Timedelta再取天数:

from pandas import Timedelta

def extract_days_from_timedelta(td_list):
    return [Timedelta(item).days for item in td_list]

df["tdColumn"] = df["tdColumn"].apply(extract_days_from_timedelta)

异常处理优化(可选)

如果列表中存在格式异常的元素(比如没有数字、空值),可以添加安全判断避免报错:

def extract_day_numbers_safe(td_list):
    result = []
    for item in td_list:
        match = re.search(r"\d+", str(item))
        result.append(int(match.group()) if match else None)
    return result

df["tdColumn"] = df["tdColumn"].apply(extract_day_numbers_safe)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:13:15