float对象无rint属性,DataFrame浮点列用np.around无法取整求助
问题:numpy取整报错
'float' object has no attribute 'rint' 用np.around给DataFrame的float列保留两位小数时触发报错,所有单元格都是float类型,但操作失败。
数据详情
- DataFrame包含两列:
LMSD和LMSD(#),数值均为带多位小数的浮点数(如0.0000000001、0.9999999999) - 列类型:两列的dtype均为
float64
执行代码
df_lmsd['LMSD']=np.around(df_lmsd['LMSD'],2) df_lmsd['LMSD(#)']=np.around(df_lmsd['LMSD(#)'],2) df_lmsd
错误提示
AttributeError: 'float' object has no attribute 'rint'
使用环境:Python 3.10.9,Jupyter Notebook
解决方法
这个问题本质是pandas与numpy的类型适配问题,直接用以下方法解决即可:
优先使用pandas自带的round方法
pandas Series自带的round方法对自身数据结构适配性更好,直接调用:df_lmsd['LMSD'] = df_lmsd['LMSD'].round(2) df_lmsd['LMSD(#)'] = df_lmsd['LMSD(#)'].round(2)转为numpy数组后再用np.around
若一定要用numpy函数,先把Series转为numpy数组再操作:df_lmsd['LMSD'] = np.around(df_lmsd['LMSD'].values, 2) df_lmsd['LMSD(#)'] = np.around(df_lmsd['LMSD(#)'].values, 2)统一列类型后再执行取整
极少数情况是数据中混入非标准float对象,先强制转换为统一的float64类型:df_lmsd['LMSD'] = df_lmsd['LMSD'].astype('float64') df_lmsd['LMSD(#)'] = df_lmsd['LMSD(#)'].astype('float64') # 再执行取整操作 df_lmsd['LMSD'] = np.around(df_lmsd['LMSD'], 2)
内容的提问来源于stack exchange,提问作者Mridul Bagla
相关产品推荐
相关产品推荐

