Как вписать переменную в запрос?
Есть большой CSV (~1000 строк данных, 13 столбцов). Загружаю его в DataFrame (cur_stat) и пытаюсь фильтровать:
curSubOrd = cur_stat.head(50)[['subordination']].values[0]
Фильтрую:
tmp = cur_stat.loc[cur_stat['id'] == curSubOrd, ['name']]
print("curSubOrd = <"+str(tmp.values[0])+">")
ValueError: ('Lengths must match to compare', (117,), (1,)).
Указывает на строку loc:
tmp = cur_stat.query("id == @curSubOrd")
print("curSubOrd = <"+str(tmp.values[0])+">")
ValueError: ('Lengths must match to compare', (117,), (1,)).
Указывает на строку query:
tmp = cur_stat[cur_stat['id'] == 556078]['name']
print("curSubOrd = <"+str(tmp.values[0])+">")
Работает.
tmp = cur_stat.query("id == 556078")['name']
print("curSubOrd = <"+str(tmp.values[0])+">")
Работает.
PS pandas 1.1.2 python 3.8.5
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Значение в переменной curSubOrd - должно быть скаляром, а у вас вектор, состоящий из одного элемента размерности (1, ). Сравнивать значения столбца можно либо с вектором той же размерности либо со скаляром.
Воспроизведение:
In [196]: df = pd.DataFrame({"a":[1,2,3], "b":[4,5,6]}, index=list("abc"))
In [197]: df
Out[197]:
a b
a 1 4
b 2 5
c 3 6
In [198]: var = df.head(2)[["a"]].values[0]
In [199]: var
Out[199]: array([1])
In [200]: var.shape
Out[200]: (1,)
Попробуйте так:
In [202]: var = df.loc[df.index[1], "b"]
In [203]: var
Out[203]: 5
In [204]: df.query("b == @var")
Out[204]:
a b
b 2 5
или в вашем случае:
curSubOrd = cur_stat.loc[cur_stat.index[0], "subordination"]