Python给pandas DataFrame添加重复时间时后续值显负数如何解决
问题根源
你使用的X[date_column_name].iloc[0:5]属于pandas的链式索引操作,先取列再取行的调用逻辑下,pandas无法确定当前操作的是原DataFrame的视图还是临时副本,赋值过程中会破坏Date列原本的datetime64数据类型,后续行的日期会被强制转为底层存储的int64类型时间戳,数值溢出后就会显示为负数。
修复方案
修改赋值逻辑,使用.loc一次性指定行和列,避免链式索引操作,pandas会自动完成数据类型兼容处理,而且单个时间戳会自动广播到所有选中行,不需要手动生成重复列表:
X.loc[0:4, date_column_name] = pd.Timestamp('1980-01-01')
如果需要手动指定重复值也可以用以下写法,效果完全一致:
X.loc[0:4, date_column_name] = list(pd.date_range('1980-01-01', periods=1)) *5
赋值完成后可以执行print(X[date_column_name].dtype)验证列类型,只要输出为datetime64[ns]就说明数据正常,不会再出现负数时间戳的问题。
内容的提问来源于stack exchange,提问作者user3104352
相关产品推荐
相关产品推荐

