Попробуйте / кроме ... AttributeError: можно использовать только метод доступа .str со строковыми значениями - PullRequest
0 голосов
/ 29 мая 2020

Я запускаю функцию, которая захватывает некоторые данные с веб-сайта и записывает их в базу данных pandas. Я использую селен и geckodriver.

...code...

first_names = driver.find_elements_by_class_name('first-name')
first_names = [name.text for name in first_names]

last_names = driver.find_elements_by_class_name('last-name')
last_names = [name.text for name in last_names]

commit_status = driver.find_elements_by_class_name('school-name')
commit_status = [commit.text for commit in commit_status]

#error is happening below

athlete['commit_school'] = athlete['commit'].str.replace('\d+', '').str.replace('/', 
'').str.replace('VERBAL', '').str.replace('SIGNED', '')

athlete['first'] = athlete['first'].str.title()
athlete['last'] = athlete['last'].str.title()

...code...

Я затем l oop через эту функцию на go через аналогичные данные на разных веб-страницах состояний. Иногда он обычно возвращает данные на странице и переходит к следующему состоянию, в то время как в других случаях я получаю: AttributeError: Может использовать аксессор .str только со строковыми значениями! ... и код ломается. Меня смущает то, что время, когда я получаю ошибку, кажется произвольным. Иногда я делаю это через 1/4 l oop, а иногда 3/4 l oop.

Моя первая попытка исправить была попытка / except, но я не уверен, правильно ли я делаю это или это лучший подход:

athlete['state'] = state_all[:length:]
athlete['hs'] = hs_all[:length:]
athlete['commit'] = commit_status[:length:]

try:
    athlete['commit_school'] = athlete['commit'].str.replace('\d+', '').str.replace('/', 
    '').str.replace('VERBAL', '').str.replace('SIGNED', '')
    athlete['first'] = athlete['first'].str.title()
    athlete['last'] = athlete['last'].str.title()
except AttributeError:
    pass

athlete['list'] = 'Rivals_' + year + '_' + list_state
athlete['home'] = profile_page[:length:]

Ошибка происходит внутри этот оператор try / except, но я думаю, что он просто пропускает все его, если обнаруживает ошибку.

1 Ответ

1 голос
/ 29 мая 2020

Решает ли приведенный ниже код, в котором я добавляю .astype('str') в середину каждого столбца? Вероятно, у вас есть столбец со смешанным типом данных строк и объектов.

athlete['commit_school'] = athlete['commit'].astype('str').str.replace('\d+', '').str.replace('/', '').str.replace('VERBAL', '').str.replace('SIGNED', '')

athlete['first'] = athlete['first'].astype('str').str.title()
athlete['last'] = athlete['last'].astype('str').str.title()
...