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

