在Python的for循环中使用.loc时如何实现向下取整?
问题描述
平时在DataFrame整列上使用apply(np.floor)可以正常将浮点数向下取整为整数,但在for循环中执行以下代码时:
f1.loc[today,'QuantityRounded'] = f1.loc[today,'QuantityNotRounded'].apply(np.floor)
出现错误:
AttributeError: 'numpy.float64' object has no attribute 'apply'
原因是通过loc[today, ...]取出的是单个numpy.float64标量值,而apply是Series/DataFrame专属的方法,标量对象没有这个属性。
解决方案
- 直接对单个标量调用
np.floor():
既然拿到的是单个数值,不需要用apply,直接把数值传入np.floor即可:f1.loc[today,'QuantityRounded'] = np.floor(f1.loc[today,'QuantityNotRounded']) - 优先考虑批量处理(推荐):
如果没有必须逐行循环的业务逻辑,直接对整列做批量处理效率更高,这也是你之前正常工作的方式:
还可以用更高效的向量化操作,完全替代f1['QuantityRounded'] = f1['QuantityNotRounded'].apply(np.floor)apply:f1['QuantityRounded'] = np.floor(f1['QuantityNotRounded'])
内容的提问来源于stack exchange,提问作者GC123
相关产品推荐
相关产品推荐

