4
我有麻煩的熊貓查詢功能,其中子表達式不包括任何框架的列。我希望下面給[True, False]
,但實際上它響應[False, True]
:熊貓查詢功能與子表達式,不包括列名
df = pd.DataFrame({'col1':[1,0]})
col1
0 1
1 0
external_var = 'yes'
df.eval('(@external_var == "yes") == col1')
0 False
1 True
似乎問題不涉及到使用external_var
,因爲
df.eval('("yes" == "yes") == col1')
給出了同樣的意外結果。
方面
我用例是書寫的系統來分分配給項目表,根據可以通過非程序員編寫規則。規則將取決於外部事件元數據(因此比較external_var
),將其與幀中的列進行比較。查詢功能似乎是理想的選擇,但它看起來並不像預期的那樣。我嘗試閱讀源,但在PandasExprVisitor
班的某處丟失。
我考慮過的一種解決方法是僅將每個外部數據分配給列,但是當元數據本身包含列表時,這似乎會中斷。
這些測試在jupyter中使用Pandas 0.16.2和numexpr 2.4.3運行。
感謝那@jezrael。我的表達式不是隻包含標量值,因爲我意識到在嘗試選擇一組行時這沒有任何意義。這樣的查詢,比如'1 == 1'給''True'一個'keyError',這是可以理解的。 但我認識到我的表達式包含僅包含標量值的子表達式。這些文檔規則是否也適用於子表達式?代碼確實運行,但結果不正確。 –
我報告這個[問題](https://github.com/pydata/pandas/issues/11044) – jezrael
雖然我同意他們應該是等同的,但他們不是:結果是不同的。我在你的bug報告中寫到了這一點,他們現在認爲這是個bug。非常感謝你報告它 - 如果你更新答案,這是一個錯誤,我會接受它! –