как исправить ошибку в столбце таблицы?

#python #pandas #string #beautifulsoup #python-3.6

#питон #панды #строка #beautifulsoup #python-3.6 #python #pandas

Вопрос:

Я извлекаю таблицу с веб-сайта. Я уже пробовала с Пандами и BeautifulSoup.

Вот пример кода, который я пробовал:

     res = requests.get("https://www.dasoertliche.de/Themen/Postleitzahlen/Berlin.html")
    soup = BeautifulSoup(res.content,'lxml')   
    table = soup.find_all('table')[0]    
    df = pd.read_html(str(table))[0]    
    df    
  

таблица веб-сайта выглядит следующим образом
Снимок экрана с веб-сайта
мои результаты выглядят примерно так
введите описание изображения здесь

Я хочу, чтобы слово в третьем столбце было разделено запятой, есть идеи?!

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

1. Попробуйте pd.read_html("https://www.dasoertliche.de/Themen/Postleitzahlen/Berlin.html")[0]

Ответ №1:

Попробуйте это:

 html = requests.get('https://www.dasoertliche.de/Themen/Postleitzahlen/Berlin.html').text.replace("<br/>", ', ')
df = pd.read_html(html, attrs={'id': 'tl-plz'})[0]
df
  

Проблема <br/> внутри таблицы, поэтому сначала мы просто избавимся от нее.

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

1. я не пробовал другое предложение, но для меня это работает просто отлично

Ответ №2:

Если вы увидите ответ HTML. Внутри этого столбца вы найдете <br/> теги для отображения каждого в следующей строке. Вы можете просто заменить <br/> на ,

 res = requests.get("https://www.dasoertliche.de/Themen/Postleitzahlen/Berlin.html")
soup = BeautifulSoup(res.content,'lxml')   
table = str(soup.find_all('table')[0]) 

#replce <br> with comma
table = table.replace("<br/>", ",")

df = pd.read_html(str(table))[0]    
df 
  

Выходной сигнал:
введите описание изображения здесь

Ответ №3:

Я не знаю, возможно ли это, но вы можете попробовать с регулярным выражением — если шаблон исправлен, т. Е. Все отдельные слова начинаются с заглавной буквы, и никакие другие заглавные символы не отображаются в отдельной строке, вы можете попробовать добавить пробелы перед каждой заглавной буквой:

 for i in range(len(df)):
    df['Ortsteil'][i] = re.sub(r"(w)([A-Z])", r"1 2", df['Ortsteil'][i]) 
  

Или без зацикливания df:

 df['Ortsteil'] = df['Ortsteil'].apply(lambda x: re.sub('(w)([A-Z])', r"1 2", str(x)))