Значение истинности ряда неоднозначно. Используйте.empty(), a.bool(), a.item(), a.any() или a,все()

#python #pandas #numpy #csv

Вопрос:

Я пытаюсь написать код, который принимает определенные (необязательные) входные данные из файла .csv и выводит данные на основе того, какие критерии (входные данные) были заданы, а какие нет. Мне удалось заставить код принимать необязательные входные данные, но я хочу, чтобы программа получала определенные выходные данные из определенных строк файла (например, переменная w-это название компании, я хочу, чтобы она считывала только указанную строку из файла .csv и игнорировала все остальные, то же самое для всех других критериев), поэтому я кое-что попробовал, вот код:

 #link CSV
    import pandas as pd

    df = pd.read_csv(r'C:UsersASUSDocumentsSmall businesses.csv',encoding='latin1')

    print(df.to_string()) 
   #Take input
w=str(input('enter name here'))
x=str(input('enter field here'))
y=str(input('enter desired operation size here'))
z=str(input('enter preferred mode of service here'))
#refine output
#to revert what you did if it doesn't work, remove the df statements and convert
#every second if back to elif 
if df.iloc[1,4]:
 if x == "":
    print (y   z)
or df.iloc[1,7]:
 if y == "":
    print (x   z)
or df.iloc[1,11]:
 if z == "":
    print (x   y)
or df.iloc[[1,4],[1,7]]:
 if x == "" and y == "":
    print(z)
or df.iloc[[1,4],[1,11]]:
 if x == "" and z == "":
    print(y)
or df.iloc[[1,7],[1,11]]:
    if y == "" and z == "":
     print(x)
or df.iloc[[1,1]]:
 if w == "":
    print ("accoridng to other guidelines, we find:")
 

Я знаю, что код неверен, но я просто не знаю, как это исправить, так как я новичок в программировании, я получил эту ошибку: «Значение истинности серии неоднозначно. Используйте a.empty(), a.bool(), a.item(), a.any() или a,все()»
Какие-нибудь исправления? Спасибо

правка: Для всех людей, которые просят меня вставить часть файла .csv, чтобы помочь, вот он: скриншот small business.csv

Вот полная ошибка ядра: Файл «C:UsersASUSuntitled2.py», строка 29, в if df.iloc[[1,4],[1,7]]:

Файл «C:UsersASUSAppDataLocalProgramsSpyderpkgspandascoregeneric.py», строка 1330, в ненулевом f»Значение истинности {типа(self).имя} неоднозначно».

Ошибка значения: Значение истинности кадра данных неоднозначно. Используйте.empty, a.bool(), a.item(), a.any() или a.all(). (извините, я новичок в этом)

Комментарии:

1. Для вопросов, связанных с внешним файлом, вы должны вставить по крайней мере часть файла для справки. В противном случае любой, кто попытается ответить, не сможет проверить свое решение. На данный момент мы не знаем, что у вас внутри df , и не можем дать много советов.

2. пожалуйста, вставьте пример Samll businesses.csv и пример того, что вы собираетесь выводить здесь

3. Вы должны показать ошибку вывода, которая будет содержать указатель на источник проблемы… Тем не менее, я предполагаю, что это связано с df.iloc[[1,4],[1,7]] типом заявлений. Вы понимаете, что логическое значение списка плохо определено, да? Следовательно all , или any и т. Д…

4. Пожалуйста, в будущем публикуйте полную трассировку стека, а не только последнюю строку и не только в заголовке. Это значительно облегчит вам помощь.

5. Я только что добавил часть файла .csv, чтобы помочь, а также добавил полную ошибку

Ответ №1:

 df.iloc[[1,4],[1,11]]
 

и другие подобные операторы возвращают a pd.series , а не логическое значение.

Чтобы оценить их в операторе If, вы должны свести эти несколько значений в одно логическое значение, используя некоторую логику.

Обычно вы захотите использовать .any() или .all() для этого.

Комментарии:

1. Спасибо! Хотя мне жаль, но я довольно новичок в этом и никогда раньше не использовал ни одну из команд (необязательный предмет в школе учит вас только многому, лол) не могли бы вы сказать мне, где/как его использовать, если вы не возражаете? Еще раз спасибо вам!

2. @Shash Что вы хотите знать, чего нет в связанных документах? Любые проверки, соответствует ли какое-либо значение вектора действительности, Все проверки, соответствуют ли они действительности. Не более того.