我有一個模擬資料框,其中一列創建為:
df = pd.DataFrame({'A': np.arange(1,201)})
這只是一個編號為 1 到 200 的資料框,其中有一列“A”。我想根據條件陳述句過濾資料框,例如
df[df["A"] > 20]
但是列名、布林值 > 和值 20 必須作為字串變數傳入。因此,我相信應該為此使用 pandas 中的 dataframe.eval 函式。為此,我創建了一個名為 select_twenty 的函式。就這個:
def select_twenty(input_df, column_name, boolean_arg, value):
evaluated = input_df.eval(input_df[input_df[column_name] boolean_arg value])
return evaluated
在上面的函式中,input_df 是上面的模擬資料框,column_name 是所選列的名稱,boolean_arg 是布林值,>,而 value 是值 20。最后三個引數在函式呼叫中作為字串傳入:
select_twenty(df, "A", ">", "20")
當我呼叫該函式時,它不斷給我一個 UFuncTypeError。我在谷歌上搜索過,不知道如何解決。我也沒有看到一個例子,熊貓中的 eval 是以這種方式完成的。所以,拜托,有人可以幫我過濾一下嗎?謝謝
uj5u.com熱心網友回復:
該錯誤 與 eval 引數的內部有關,因為您正在嘗試將 DataFrame 列值添加到boolean_arg. 您正在尋找的是:
def select_twenty(input_df, column_name, boolean_arg, value):
evaluated = input_df[input_df.eval(column_name boolean_arg value)]
return evaluated
print(select_twenty(df, "A", ">", "20"))
A
20 21
21 22
22 23
23 24
24 25
.. ...
195 196
196 197
197 198
198 199
199 200
[180 rows x 1 columns]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/472468.html
上一篇:使用pandas重命名檔案夾
下一篇:如何根據上面行的值迭代每一行?
