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

Pandas高版本Series时间索引赋值结果异常问题咨询

Pandas 2.x与1.0.3版本中Series时间索引赋值的差异问题

执行以下代码时,Pandas 2.x及以上版本与1.0.3版本的输出存在明显差异:

import pandas as pd
dt = pd.to_datetime(['2024-02-28 10:00:08'])
s = pd.Series([1],index=dt)
s.loc['2024-02-28 10:59'] = 10
s.loc['2024-02-28 10:2:30'] = 5
s.loc['2024-02-28'] = 3
s.loc['2024-02-28 10:08:00'] = 4
print(s)

不同版本输出

Pandas 2.x及以上版本输出

2024-02-28 10:00:08    3.0
2024-02-28 10:59:00    3.0
2024-02-28 10:02:30    3.0
2024-02-28 10:08:00    4.0
dtype: float64

注:原输出日期存在笔误,应为2024-02-28而非2024-02-24

Pandas 1.0.3版本输出

2024-02-28 10:00:08     1
2024-02-28 10:59       10
2024-02-28 10:2:30      5
2024-02-28              3
2024-02-28 10:08:00     4
dtype: int64

现象说明与结论

这属于Pandas最新版本中的正常预期行为,差异源于Pandas 2.x版本对时间索引的.loc赋值逻辑做了调整:

  • 在1.0.3版本中,使用.loc赋值粗粒度时间(如'2024-02-28')时,会直接新增对应索引条目,不会修改现有同日期的其他索引值。
  • 在2.x及以上版本中,.loc针对时间索引的部分匹配(用日期匹配该日期下所有时间戳)会触发批量覆盖赋值——所有属于2024-02-28的现有索引条目都会被设为3,而非新增索引。最后一行s.loc['2024-02-28 10:08:00'] = 4是新增的未被批量覆盖的索引条目,因此保留值4。
  • dtype从int64变为float64是因为批量赋值触发了类型提升,属于Pandas类型自动转换的正常逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:13:12