回答編集履歴

1

追記

2023/01/22 12:01

投稿

bsdfan
bsdfan

スコア4569

test CHANGED
@@ -2,7 +2,7 @@
2
2
  (pandas 1.5.3, numexpr 2.8.4)
3
3
  engine のデフォルトは、numexpr がインストールされている場合は numexpr を使って、インストールされていない場合は python になるはずです。
4
4
 
5
- この例で、pandas と numexpr のそれぞれがどう動いているのか、ドキュメントを探ってもよくわかりませんでした。numexprが max と min を変数(カラム名)としてではなく、予約された関数名として扱っていて max != min → True としていそうな気がします。
5
+ この例で、pandas と numexpr のそれぞれがどう動いているのか、ドキュメントを探ってもよくわかりませんでした。numexpr が max と min を変数(カラム名)としてではなく、予約された関数名として扱っていて max != min → True としていそうな気がします。
6
6
  対処法としては、下記のようになるのかと思います。
7
7
  ①maxとかminとかのカラム名を使わない
8
8
  ②queryを使わない (booleanインデックスを使う)
@@ -28,3 +28,13 @@
28
28
  #2 c 3 5
29
29
  ```
30
30
 
31
+ ### 追記
32
+ numexpr の evaluate に local_dict で渡しても、max を変数としては扱ってくれませんでした。
33
+ なので、numexpr の予約語扱いになっているものは、うまく扱えないんじゃないでしょうか。
34
+ (何が予約語扱いなのかが不明ですが・・・)
35
+ ```python
36
+ import numexpr as ne
37
+
38
+ ne.evaluate('max', local_dict={'max': 1})
39
+ # TypeError: unsupported expression type: <class 'function'>
40
+ ```