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

如何使用NumPy查找并删除date列含NaN的行并处理类型转换报错

报错是因为date列混合了日期值和空值,转numpy后是object类型数组,直接转np.datetime64时没有指定时间单位,导致numpy无法识别精度抛出异常。

实现代码

import numpy as np
import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    "id": [1,2,3,4],
    "horstid": [11,22,33,33],
    "date": pd.to_datetime(["2008-09-24", None, "2008-09-18", "2008-10-24"])
})

# 1. 转换为numpy数组
np_array = df.to_numpy()
# 转换date列时明确指定时间单位为天[D],避免泛型单位报错
date_col = np.array(np_array[:,2], dtype="datetime64[D]")

# 2. 定位date列为空的行(numpy datetime类型空值为NaT,用isnat判断)
nan_row_index = np.where(np.isnat(date_col))[0]

# 3. 打印空值行
print("date列为空的行:")
for i in nan_row_index:
    print(np_array[i])

# 4. 删除空值行
clean_array = np.delete(np_array, nan_row_index, axis=0)

# 验证结果
print("\n清理后的数组:")
print(clean_array)

注意事项

  • 转换datetime64类型时必须指定精度,常用精度包括天[D]、秒[s]、纳秒[ns],和你原始日期精度匹配即可
  • 不能用np.isnan()判断datetime类型的空值,必须用np.isnat()
  • 如果你不想提前用pandas转换date列的类型,也可以在转换numpy数组后,手动对date列的字符串做时间转换,空值会自动变成NaT

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:27:00