2017-08-28 181 views
0

我正在使用2個變量的DataFrame查詢。 第一個變量是列標籤,第二個是值列表。 我想要做的是選擇該列中包含該列表中的值的所有行。奇怪的是,如果我寫的列標籤作爲字符串沒有錯誤,而引用該列標籤變量提供了以下錯誤:熊貓DataFrame:查詢變量

Traceback (most recent call last): 
    File "C:\Python\Python36\lib\site-packages\pandas\indexes\base.py", line 2134, in get_loc 
    return self._engine.get_loc(key) 
    File "pandas\index.pyx", line 132, in pandas.index.IndexEngine.get_loc (pandas\index.c:4433) 
    File "pandas\index.pyx", line 151, in pandas.index.IndexEngine.get_loc (pandas\index.c:4238) 
    File "pandas\index.pyx", line 388, in pandas.index.Int64Engine._check_type (pandas\index.c:8171) 
KeyError: False 

這是工作代碼:

rhs_values_list = df1["RHS"].tolist() 
query = "shoe_size in @rhs_values_list" 
result_set = df2.query(query) 

而這種上升上述錯誤:

rhs_values_list = df1["RHS"].tolist() 
col = "shoe_size" 
query = "@col in @rhs_values_list" 
result_set = df2.query(query) 

是不是有什麼毛病查詢的第二個版本?

回答

1

您正在做的是在字符串中執行@col的實際查詢,而不是綁定到該變量的值。你可以使用字符串插值例如:

rhs_values_list = df1["RHS"].tolist() 
    col = "shoe_size" 
    query = "{} in @rhs_values_list".format(col) 
    result_set = df2.query(relaxed_query) 
+0

使用像這樣的字符串插值的FYI通常不是一個好主意。理想情況下,您希望使用允許參數化查詢的庫,並將清理任何變量。 – Solaxun

+0

在這種情況下,SQL注入不是一個問題,因爲您無法將表格變異查詢傳遞給'df.query'。 –

+0

大家好,熊貓讓你回來:) – Solaxun