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

Pandas 1.3.4中DateTime线性插值的正确实现(解决FutureWarning)

解决Pandas 1.3.4中datetime转int64的FutureWarning问题

问题背景

使用Pandas 1.3.4版本,现有代码可将非单调时间戳插值到带单调浮点型时间索引的DataFrame out中,但运行时抛出FutureWarning,提示将datetime64[ns]转int64时应使用.view()替代.astype('int64')。但Pandas 1.3.4的DataFrame没有.view()方法,且无法升级版本,需找到兼容的实现方式。

原核心代码:

out = out.join(dateTime_df.astype('int64'), 
               how = 'outer',
               ).interpolate(method = 'linear',  
                             limit_area = 'inside',
                             ).loc[index]  #`index` is the monotonous time index
out["DateTime_col"] = out["DateTime_col"].astype('<M8[ns]')  

抛出的警告:

FutureWarning: casting datetime64[ns] values to int64 with .astype(...) is deprecated and will raise in a future version. Use .view(...) instead.

测试数据:

import pandas as pd
import numpy as np
import datetime

out = pd.DataFrame(np.random.rand(10, 3), 
                   columns = ['previously', 'imported', 'data'])
dateTime_df = pd.DataFrame([datetime.datetime.now() - datetime.timedelta(days = 1), 
                            datetime.datetime.now()], 
                           index = [3, 7], 
                           columns = ["DateTime_col"])
index = np.arange(10)

解决方案

Pandas 1.3.4中DataFrame虽无.view()方法,但Series有该方法。因此可以单独提取时间列转为整数型Series后再进行join和插值操作,具体步骤如下:

  1. 提取dateTime_df中的DateTime_col列,使用.view('int64')转为整数型(保持原索引)
  2. 将转换后的Series与out进行outer join
  3. 执行线性插值(限制仅在已有数据区间内插值)
  4. 筛选目标索引后,将DateTime_col转回datetime64[ns]类型

修改后的核心代码:

# 单独处理时间列,用Series的view转int64
datetime_series = dateTime_df["DateTime_col"].view('int64')

# 执行join、插值、索引筛选
out = out.join(datetime_series, how='outer') \
         .interpolate(method='linear', limit_area='inside') \
         .loc[index]

# 转回datetime类型
out["DateTime_col"] = out["DateTime_col"].view('<M8[ns]')

验证说明

运行修改后的代码,既可以完成时间戳的线性插值,又不会触发FutureWarning。插值后的DateTime_col列会在索引3到7之间生成连续的时间值,符合预期需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:23:14