Ошибка значения: выражение должно быть строкой для вычисления, задано

#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]