1

私は数日間問題に悩まされています。誰かが助けてくれたらありがたいです.

整数リスト項目で満たされた列を持つデータフレームがあります。

たとえば、単一列のデータフレーム:

>>> df=pd.DataFrame({'a':[[1, 2, 3], [2, 4, 5], [1, 7, 8]]})

>>> df
           a
0  [1, 2, 3]
1  [2, 4, 5]
2  [1, 7, 8]

データフレームでクエリを実行して、要素に特定の値が含まれる行を選択したいと考えています。"in" 演算子は、この操作では機能しません。funcクエリで呼び出す関数を定義しました

>>> def func(l, v):
...     return l.apply(lambda val: v in val)

次に、クエリを呼び出すと、python 3.6.3 で期待どおりに動作します (pip3 を介したいくつかの更新を含む xubuntu のデフォルト インストール)。たとえば、値7を含む唯一の行を返します

>>> df.query('@func(a, 7)')
           a
2  [1, 7, 8]

ただし、最後の anaconda リリースに含まれている python 3.6.4 で実行すると、次のメッセージで失敗します: 「シリーズ」オブジェクトは変更可能であるため、ハッシュできません

>>> df.query('@func(a, 7)') Traceback (most recent call last):   File "<stdin>", line 1, in <module>   File
"/home/cedric/.local/lib/python3.6/site-packages/pandas/core/frame.py",
line 2297, in query
    res = self.eval(expr, **kwargs)   File "/home/cedric/.local/lib/python3.6/site-packages/pandas/core/frame.py",
line 2366, in eval
    return _eval(expr, inplace=inplace, **kwargs)   File "/home/cedric/.local/lib/python3.6/site-packages/pandas/core/computation/eval.py",
line 295, in eval
    ret = eng_inst.evaluate()   File "/home/cedric/.local/lib/python3.6/site-packages/pandas/core/computation/engines.py",
line 76, in evaluate
    res = self._evaluate()   File "/home/cedric/.local/lib/python3.6/site-packages/pandas/core/computation/engines.py",
line 122, in _evaluate
    _check_ne_builtin_clash(self.expr)   File "/home/cedric/.local/lib/python3.6/site-packages/pandas/core/computation/engines.py",
line 31, in _check_ne_builtin_clash
    names = expr.names   File "/home/cedric/.local/lib/python3.6/site-packages/pandas/core/computation/expr.py",
line 755, in names
    return frozenset([self.terms.name])   File "/home/cedric/.local/lib/python3.6/site-packages/pandas/core/generic.py",
line 1045, in __hash__
    ' hashed'.format(self.__class__.__name__)) TypeError: 'Series' objects are mutable, thus they cannot be hashed

私が使用するpython3(> = 3.6)が何であれ、関数が機能することを望みます。多分私はそれを間違った方法でやっています。どんな助けでも大歓迎です。

EDIT 1 : どちらの場合も pandas 0.22.0 を使用しています。

解決策:解決策を見つけました。この問題は、anaconda のクエリ関数のデフォルト engine='numexpr' が原因で発生します。engine='python' を設定すると、再び動作します。

4

1 に答える 1