为何pd.Timedelta传入numpy.str_类型输入会报错?
numpy字符串传入pd.Timedelta报错的问题
报错场景代码
import numpy as np, pandas as pd ar = np.array(['00:00:00']) pd.Timedelta(ar[0])
执行结果
TypeError: Expected unicode, got numpy.str_
这种情况看起来和Python的鸭子类型特性相悖,让人费解。
正常运行的对比代码
pd.Timedelta('00:00:00')
执行结果
Timedelta('0 days 00:00:00')
原因与解决办法
问题出在pandas的Timedelta构造函数的类型检查逻辑上——它直接校验输入是否为Python原生的str(unicode)类型,而非基于鸭子类型的行为判断。numpy的numpy.str_虽然功能上和字符串一致,但属于numpy自定义的类型,没被pandas的检查逻辑覆盖。
解决起来很简单,把numpy字符串转成Python原生字符串就行:
# 方法1:用str()转换 pd.Timedelta(str(ar[0])) # 方法2:用numpy的item()提取原生类型 pd.Timedelta(ar[0].item())
内容的提问来源于stack exchange,提问作者extremeaxe5
相关产品推荐
相关产品推荐

