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

使用numpy.where时datetime64与str_类型无法提升的报错解决方法

解决np.where中datetime与字符串类型不兼容的TypeError

错误原因

报错核心是np.where的两个返回值类型不匹配:满足条件时返回datetime64类型的时间值,不满足时返回字符串类型的空值'',numpy无法为这两种类型找到通用的 dtype,因此抛出类型提升失败的错误。

解决方案(满足先条件判断的要求)

方案1:用pd.NaT替代空字符串(推荐)

pd.NaT是pandas专门用于表示缺失时间值的类型,和datetime64类型完全兼容,能保证np.where返回结果的类型统一。

修改后的代码:

import pandas as pd
from datetime import timedelta
import numpy as np

df = pd.DataFrame({
    'open_local_data':['2022-08-24 15:00:00','2022-08-24 18:00:00'],
    'result':['WINNER','']
})
df['open_local_data'] = pd.to_datetime(df['open_local_data'])
# 用pd.NaT替代空字符串,确保类型一致
df['clock_now'] = np.where(
    df['result'] != '',
    df['open_local_data'] + timedelta(minutes=150),
    pd.NaT
)
print(df[['open_local_data','clock_now']])

运行结果:

open_local_data          clock_now
0 2022-08-24 15:00:00 2022-08-24 17:30:00
1 2022-08-24 18:00:00                 NaT

方案2:强制转换为object类型(保留空字符串)

如果业务上必须保留空字符串,可以将np.where的结果强制转为object类型,允许混合存储不同类型的值:

修改后的代码:

import pandas as pd
from datetime import timedelta
import numpy as np

df = pd.DataFrame({
    'open_local_data':['2022-08-24 15:00:00','2022-08-24 18:00:00'],
    'result':['WINNER','']
})
df['open_local_data'] = pd.to_datetime(df['open_local_data'])
# 强制转为object类型,兼容datetime和字符串混合存储
df['clock_now'] = np.where(
    df['result'] != '',
    df['open_local_data'] + timedelta(minutes=150),
    ''
).astype(object)
print(df[['open_local_data','clock_now']])

运行结果:

open_local_data          clock_now
0 2022-08-24 15:00:00 2022-08-24 17:30:00
1 2022-08-24 18:00:00                    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:35:33