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

在Pandas中拆分DataFrame的Difference列生成Day新列求助

解决方法:从Timedelta列提取天数到新列

嘿,我来帮你搞定这个问题!你遇到的核心问题是没注意到Difference列的类型——它是pandas Timedelta(时间差)对象,不是普通字符串,所以之前的字符串拆分方法才会失效。下面给你两种可行的方案,优先推荐第一种:

方案1:直接使用Timedelta的.dt.days属性(最推荐)

pandas为时间差类型的Series提供了.dt访问器,可以直接提取天数、小时等属性,这是最简洁高效的方式,完全不需要做字符串处理:

import pandas as pd
import datetime

# 创建DataFrame df
df = pd.DataFrame({'sample_date':['2018-01-10','2018-01-10','2018-01-11','2018-01-11','2018-01-12']})
# 获取当前日期,撰写本文时为2018-01-12
today = datetime.date.today()
# 为df添加新列Today
df['Today'] = today
# 将所有列转换为datetime类型
df['sample_date'] = pd.to_datetime(df['sample_date'])
df['Today'] = pd.to_datetime(df['Today'])
# 创建新列Difference,计算Today与sample_date的差值
df['Difference'] = df['Today'] - df['sample_date']

# 重点:提取天数到Day列
df['Day'] = df['Difference'].dt.days

运行后你会得到完全符合预期的输出:

sample_dateTodayDifferenceDay
2018-01-102018-01-122 days 00:00:00.0000000002
2018-01-102018-01-122 days 00:00:00.0000000002
2018-01-112018-01-121 days 00:00:00.0000000001
2018-01-112018-01-121 days 00:00:00.0000000001
2018-01-122018-01-120 days 00:00:00.0000000000

方案2:字符串拆分(不推荐,仅作参考)

如果你非要用字符串拆分的方式,需要先把Timedelta对象转为字符串,再用.str访问器逐元素拆分(注意不是把整个Series转成字符串!之前的错误就是在这里):

# 把Difference转成字符串后拆分,取第一个元素
df['Day'] = df['Difference'].astype(str).str.split().str[0]

这种方法虽然能得到结果,但不如方案1稳定——如果时间差的格式发生变化(比如包含小时、分钟),字符串拆分可能会出错,而.dt.days是直接从时间差对象中提取数值,可靠性更高。

为什么你之前的方法出错?

你尝试的str(df['Today'] - df['sample_date']).split()[0]是把整个Series对象转成了字符串(比如输出会是类似0 2 days...\n1 2 days...的格式),拆分后取第一个元素是索引的0,所以所有行的Difference都变成了0,这显然不是你想要的效果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:01:52