Python中min()函数与pandas数组结合使用异常?原因及解决方法
问题原因与修复方案
原因分析
Python内置的min()函数是整体对象比较,而非逐元素比较。当传入标量20和pandas数组时,它会判断两个对象的整体大小:由于pandas数组的整体"大小"判定逻辑是基于其元素的最小值(这里数组最小元素是1,远小于20),所以min()直接返回了整个平方后的数组,而非逐元素取最小值,这就是你得到[1, 4, 9, 16, 25]的原因。
修复方法
有两种简单的元素级取最小值的实现方式:
方法1:使用pd.minimum()
pandas提供的pd.minimum()函数支持逐元素比较取小值,完全符合你的需求:
import pandas as pd a = [1,2,3,4,5] print(pd.minimum(20, pd.array(a)**2))
方法2:使用数组的clip()方法
如果需求是把超过20的元素截断为20,也可以用clip()方法,效果一致:
import pandas as pd a = [1,2,3,4,5] print((pd.array(a)**2).clip(upper=20))
内容的提问来源于stack exchange,提问作者Yang Yang
相关产品推荐
相关产品推荐

