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
相关产品推荐
相关产品推荐

