Как выполнить итерацию по списку, чтобы увидеть, соответствует ли какое-либо значение в списке части значения в другой ячейке? - PullRequest
0 голосов
/ 11 июля 2020

У меня есть список штатов США из библиотеки США. Затем я пытаюсь пройти l oop через столбец в файле Excel, чтобы увидеть, содержат ли какие-либо ячейки в этом столбце какие-либо штаты США. Если это так, я удалю эти строки.

excel_file = pd.read_excel('file.xlsx', sheet_name = 'sheet')

states = us.states.STATES

for i in range(len(excel_file['Column Label'])):
    if any(states) in excel_file['Column Label'][i]:
        print(i)

Прямо сейчас у меня есть оператор печати в l oop, чтобы посмотреть, какие индексы появятся, но сам l oop не т работает. Я получаю эту ошибку.

TypeError: 'in' требует строки в качестве левого операнда, а не bool

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Это не то, что делает any(). any() перебирает итерируемый объект и возвращает True, если что-либо из этого итерируемого приводит к True.

Например:

any([False, False, False]) => False
any([False, True, False])  => True

Чтобы было легче читать то, что вы пытаюсь сделать, я переключился на enumerate() l oop вместо диапазона. Это возвращает индекс и текущее значение, которое мы повторяем. Для каждой записи на листе мы можем затем проверить, находится ли эта запись в вашем списке состояний.

Здесь оператор print() печатает как значение i, так и вашу запись, которая соответствует.

for i, entry in enumerate(excel_file['Column Label']):
  if entry in states:
    print(i, entry)

Примечание: Python скрывает тот факт, что для этого упражнения требуется вложенный l oop. Верх для l oop очевиден, но ключевое слово in создает собственное al oop. Он сравнивает entry с каждым элементом в states, по крайней мере, пока не найдет совпадение.

0 голосов
/ 11 июля 2020

Попробуйте этот код ниже. Функция any() возвращает True, если какой-либо элемент в итерации верен, в противном случае она возвращает False:

any(state in excel_file['Column Label'][i] for state in states)
...