使用np.log处理Pandas转换的NumPy数组时出现AttributeError错误
问题分析与解决方法
这个错误的核心原因是你从DataFrame转出来的NumPy数组dtype为object类型,里面存储的是Python原生float对象,而非NumPy自带的浮点类型。调用np.log(flag)时,NumPy会尝试对数组内每个元素调用.log()方法,但Python原生float根本没有这个属性,因此触发报错。
排查验证
先打印数组的数据类型确认问题:
print(flag.dtype)
如果输出是object,就说明确实是类型不匹配导致的问题。
解决方法
方法1:转换数组为NumPy浮点类型
在调用np.log前,将数组转为NumPy的float64类型:
flag = df.iloc[0:12,7].to_numpy() flag = flag.astype(np.float64) print(np.log(flag))
方法2:转换时直接指定dtype
也可以在to_numpy阶段直接指定数据类型,一步完成转换:
flag = df.iloc[0:12,7].to_numpy(dtype=np.float64) print(np.log(flag))
方法3:直接对Series调用np.log
其实无需转成NumPy数组,直接对Pandas Series调用np.log即可,Pandas会自动处理类型兼容问题:
print(np.log(df.iloc[0:12,7]))
你手动创建的数组能正常运行,是因为np.array([1.35,2.49,3.687])默认生成float64 dtype的NumPy数组,元素都是NumPy浮点类型,np.log可以直接对整个数组做向量化运算,不会去调用单个元素的.log()方法。
内容的提问来源于stack exchange,提问作者Jesh Kundem
相关产品推荐
相关产品推荐

