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

Numpy np.r_处理日期列异常:日期转为长整数的问题求助

问题分析与解决办法

先排查原始数据问题

  • 先打印第二类数据集目标列的前10行,确认是不是真的全是"YYYY-MM-DD HH:MM:SS"格式:
    print(pd_df.iloc[:, np.r_[5:7,9]].head(10))
    
  • 再检查列里的元素类型,看有没有混进数值(比如时间戳):
    print(pd_df.iloc[:, np.r_[5:7,9]].applymap(type).value_counts())
    
    你看到的长整数是纳秒级时间戳(比如1681689600000000000对应2023-04-16 00:00:00),说明第二类数据集的日期列表面是object类型,但实际混了数值型的时间戳,导致pd.to_datetime没按你指定的format解析,反而自动识别成了时间戳。

针对性解决方法

方法1:统一转字符串后解析

先把所有元素转成字符串,再按指定格式解析,避免数值干扰:

cols = np.r_[5:7,9]
pd_df.iloc[:, cols] = pd_df.iloc[:, cols].astype(str).apply(pd.to_datetime, format='%Y-%m-%d', errors='coerce')

如果转字符串后有纯数字的时间戳(会被转成NaT),可以用自定义函数分情况处理:

def parse_date(x):
    try:
        # 先尝试按日期格式解析
        return pd.to_datetime(x, format='%Y-%m-%d')
    except:
        # 解析失败就按纳秒时间戳处理,毫秒级就改unit='ms',秒级改unit='s'
        return pd.to_datetime(int(x), unit='ns')

cols = np.r_[5:7,9]
pd_df.iloc[:, cols] = pd_df.iloc[:, cols].applymap(parse_date)

方法2:分类型解析

直接判断元素类型,字符串按格式解析,数值按时间戳解析:

cols = np.r_[5:7,9]
pd_df.iloc[:, cols] = pd_df.iloc[:, cols].apply(lambda x: 
    pd.to_datetime(x, format='%Y-%m-%d') if isinstance(x, str) and '-' in x 
    else pd.to_datetime(x, unit='ns')
)

验证转换结果

转换完后检查列类型和数据是否正常:

print(pd_df.iloc[:, cols].dtypes)
print(pd_df.iloc[:, cols].head())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:23:32