如何使用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
相关产品推荐
相关产品推荐

