【问题标题】:Pandas .loc method won't return empty dataframe when checking for equalityPandas .loc 方法在检查是否相等时不会返回空数据框
【发布时间】:2023-02-25 21:37:58
【问题描述】:

我创建了一个 dtype float64 的计算列,并预设精度为 2 位小数。

data['Engine Efficiency'] = 4.0 * data['Engine Displacement'] / (data['# Cylinders'].astype('float64') * 3.24)

我正在尝试根据其值过滤此列,检查是否相等: data.loc[data['Engine Efficiency'] == 0.62]

如果 float 数学损坏,还尝试了以下操作:

data[np.isclose(data['Engine Efficiency'], 0.62)]

data[np.abs(data['Engine Efficiency'] - float(0.62)) < 0.0001*float(0.62)]

在所有情况下,输出都是一个空数据框,这不应该是这种情况。

在检查不平等时,我得到了完整的数据框,本质上意味着我正在搜索的值不存在。我认为这应该是计算过程中的一个数字问题。

我试过更改计算公式,使用math.pi/np.pi,设置精度,将所有内容转换为浮点数,但仍然没有。

如果需要,您可以在此处找到数据集和笔记本文件: https://wetransfer.com/downloads/aa57abd8d2626e1ec39a0f32ecf59cad20230225114538/184585

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    如果值正确,isclose 代码将起作用。你的问题是那里真的没有 Engine Efficiency 为 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

    【讨论】:

    • 我找到了另一种绕过它的方法,类似于您的格式,但应用了地图功能。值 0.62 存在于我的一次尝试中,我可能在上传之前更改了代码。
    猜你喜欢
    • 2016-08-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2021-10-20
    相关资源
    最近更新 更多