Pandas DataFrame:使用变量进行查询

时间:2017-08-28 21:22:35

标签: python pandas dataframe

我正在使用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)

第二版查询有问题吗?

1 个答案:

答案 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)