pandas loc方法在检查是否相等时不会返回空 Dataframe

hwamh0ep  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(221)

我创建了一个dtype为float64的计算列,并预设精度为2位小数。
data['Engine Efficiency'] = 4.0 * data['Engine Displacement'] / (data['# Cylinders'].astype('float64') * 3.24)
我正尝试根据列的值筛选该列,检查是否相等:data.loc[data['Engine Efficiency'] == 0.62]
另外,在浮点数数学损坏的情况下尝试了以下操作:
data[np.isclose(data['Engine Efficiency'], 0.62)]
data[np.abs(data['Engine Efficiency'] - float(0.62)) < 0.0001*float(0.62)]
在所有情况下,输出都是空 Dataframe ,这是不应该的。
当检查不等式时,我得到了完整的 Dataframe ,这意味着我搜索的值不存在,我想这应该是计算过程中的一个数字问题。
我试过改变计算公式,使用math.pi/np.pi,设置精度,将所有内容转换为浮点,仍然什么都没有。
如果需要,您可以在此处找到数据集和笔记本文件:https://wetransfer.com/downloads/aa57abd8d2626e1ec39a0f32ecf59cad20230225114538/184585

7kqas0il

7kqas0il1#

如果值正确,isclose代码将起作用。您的问题是实际上没有Engine Efficiency为0.62或接近0.62(使用默认容差)的行。由于显示格式的原因,这在您的输出中不清楚。要查看发生了什么,请使用

pd.options.display.float_format = '{:03.5f}'.format
data.loc[(data['Engine Efficiency']> 0.61) & (data['Engine Efficiency']< 0.63)]

你会看到,使用我的显示格式,值实际上是0.62633。你可以使用以下方法舍入值:

data['Engine Efficiency'] = round(data['Engine Efficiency'],2)

当该值为0.63000时

相关问题