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

如何在Pandas DataFrame中基于已有数据重新计算datetime类型数据

问题原因

你使用的data["start"][1]属于链式索引操作,Pandas无法确定你操作的是原始DataFrame还是它的临时切片副本,因此会抛出SettingWithCopyWarning警告,即使当前运行结果符合预期,也存在修改不生效到原对象的潜在风险。

修复方案

方案1:向量化计算(推荐)

不需要逐行循环,直接利用累加函数批量计算所有start值,性能更高且完全不会触发警告:

import pandas as pd
# 首行start值 + 逐行累计的前序duration之和
data["start"] = data["start"].iloc[0] + data["duration"].shift(fill_value=pd.Timedelta(0)).cumsum()

逻辑说明:shift操作将duration列整体下移一行,首行填充0时长,累加后正好对应每行需要叠加的总时长,加上初始start值就能得到所有行的正确start。

方案2:逐行赋值的正确写法

如果确实需要逐行操作,使用.loc索引替代链式索引即可:

for i in range(1, len(data)):
    data.loc[i, "start"] = data.loc[i-1, "start"] + data.loc[i-1, "duration"]

额外注意事项

如果你的data本身是从其他DataFrame切片过滤得到的,建议在切片时显式调用.copy()生成独立副本,从根源避免警告:

# 示例:如果data是其他df的切片,加上copy
data = original_df[original_df['筛选条件']].copy()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:09:04