#python #pandas #string #input
#python #панды #строка #ввод
Вопрос:
когда я ввожу Францию для гео ниже, это выдает ошибку, может кто-нибудь помочь?
geo = input("Select the country you´d like to analyze (France / Germany / Spain): ")
churn_ds = pd.read_csv('../input/predicting-churn-for-bank-customers/Churn_Modelling.csv', sep=",",).query('Geography' == geo)
#ValueError: expr must be a string to be evaluated, <class 'bool'> given
Комментарии:
1. вместо использования
query
используйтеchurn_ds = pd.read_csv('...')['Geography'==geo]
2. Привет, поскольку теперь у вас есть ответы, вы можете подумать о принятии ответа , чтобы вознаградить тот, который дает вам наиболее полезный комментарий.
Ответ №1:
Метод DataFrame.query
ожидает a string
в качестве аргумента, если вы хотите использовать логический оператор, синтаксис отличается
churn_ds = pd.read_csv('Churn_Modelling.csv', sep=",").query(f'Geography == "{geo}"')
churn_ds = pd.read_csv('Churn_Modelling.csv', sep=",").query(f'Geography == @geo') # takes geo variable
# Or
churn_ds = pd.read_csv('Churn_Modelling.csv', sep=",")
churn_ds = churn_ds[churn_ds['Geography'] == geo]
Комментарии:
1. Или
df.query('Geography == @geo')
2. @SayandipDutta, не могли бы вы, пожалуйста, предоставить ссылку на использование
@
в этом контексте?3. @navneethc Посмотреть
here
4. Ах, спасибо. Приятно знать, но, похоже, он не предназначен для регулярного использования.
Ответ №2:
Сам запрос должен быть строкой. То, что вы указали, является логическим выражением.
Попробуйте это вместо:
.query("Geography == {0}".format(geo))
(Python 3)
.query(f"Geography == {geo}")
(Python >= 3.6)
Ответ №3:
Согласно документации, выражение должно быть строкой. Поэтому оно должно заключаться в кавычки. Теперь вопрос в том, как вы ссылаетесь на «geo», который теперь является переменной. Смотрите документацию.
Параметры
expr:str The query string to evaluate. You can refer to variables in the environment by prefixing them with an ‘@’ character like @a b.
На эту ясность уже указали @sayandip-dutta и @azro, вам нужно использовать символ «@», поскольку «geo» теперь является переменной.
import pandas as pd
geo = input("Select the country you´d like to analyze (France / Germany / Spain): ")
churn_ds = pd.read_csv('./Churn_Modelling.csv', sep=",").query(expr='Geography == @geo')
print(churn_ds)
Выдает следующий вывод.
RowNumber CustomerId ... EstimatedSalary Exited
1 2 15647311 ... 112542.58 0
4 5 15737888 ... 79084.10 0
5 6 15574012 ... 149756.71 1
11 12 15737173 ... 76390.01 0
14 15 15600882 ... 65951.65 0
... ... ... ... ... ...
9966 9967 15590213 ... 20393.44 0
9980 9981 15719276 ... 99595.67 0
9987 9988 15588839 ... 1914.41 0
9989 9990 15605622 ... 179436.60 0
9992 9993 15657105 ... 195192.40 0
[2477 rows x 14 columns]