pandas 查询非空字符串给出不同的结果

问题描述 投票:0回答:1

任何人都可以帮助解释为什么我在使用两种我认为等效的查询方法时得到不同的结果吗?我已经阅读了很多次文档,但我仍然无法弄清楚。我确信我一定遗漏或误解了一些基本的东西。

这是我的测试数据:

import pandas as pd

df = pd.DataFrame(
    {
        "fruit": ["apple", "banana", "cherry", "", pd.NA]
    },
    dtype = "string"
)

以下是不同的查询结果:

>>> df.query("fruit != ''")

    fruit
0   apple
1  banana
2  cherry
4    <NA>

>>> df[df.fruit != '']

    fruit
0   apple
1  banana
2  cherry

为什么第一个查询返回包含

<NA>
的行,而另一个查询则不返回?

python pandas
1个回答
0
投票

经过更深入的调查,我得出的结论是,

query
方法和索引之间存在明显的实现差异。

我查看了代码,pandas.query使用了

eval
方法。此方法可以使用两种不同的解析器:
pandas
python

pandas
解析器是默认的,它会带来你得到的结果,包括
<NA>

不太可能(我不知道为什么

python
解析器实现
==
!=
;但您可以使用
df.query("fruit > ''", parser="python")
并查看结果是否符合您的预期。

© www.soinside.com 2019 - 2024. All rights reserved.