我正在使用2个变量处理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)
第二版查询有问题吗?
答案 0 :(得分:2)
您正在做的是在字符串中使用@col
执行实际查询,而不是绑定到该变量的值。您可以使用字符串插值,例如:
rhs_values_list = df1["RHS"].tolist()
col = "shoe_size"
query = "{} in @rhs_values_list".format(col)
result_set = df2.query(relaxed_query)