У меня есть некоторые проблемы с очисткой данных - PullRequest
0 голосов
/ 08 апреля 2019

Я очистил таблицу со страницы Википедии и собираюсь очистить данные дальше.Я преобразовал данные в формат Pandas, и теперь у меня есть некоторые проблемы с очисткой данных

Вот коды, которые я выполнил, чтобы очистить таблицу со страницы википедии

import requests
import pandas as pd
website_url = requests.get('https://en.wikipedia.org/wiki/List_of_postal_codes_of_Canada:_M').text
from bs4 import BeautifulSoup
soup = BeautifulSoup(website_url,'lxml')
print(soup.prettify())
My_table = soup.find('table',{'class':'wikitable sortable'})
My_table
PostalCode=[]
for row in My_table.findAll('tr')[1:]:
    PostalCode_cell=row.findAll('td')[0]
    PostalCode.append(PostalCode_cell.text)    
print(PostalCode)   
Borough=[]
for row in My_table.findAll('tr')[1:] :
    Borough_cell=row.findAll('td')[1]
    Borough.append(Borough_cell.text)   
print(Borough)
Neighbourhood=[]
for row in My_table.findAll('tr')[1:]:
    Neighbourhood_cell=row.findAll('td')[2]
    Neighbourhood_cell.text.rstrip('\n')
    Neighbourhood.append(Neighbourhood_cell.text)
print(Neighbourhood)
canada=pd.DataFrame({'PostalCode':PostalCode,'Borough':Borough,'Neighborhood':Neighbourhood})
canada.rename(columns = {'PostalCode':'PostalCode','Borough':'Borough','Neighborhood':'Neighborhood'}, inplace = True) 
canada

Я попытался сгруппировать функцию, надеясь получить второй желаемый результат, но не получилось:

canada.groupby(['PostalCode', 'Borough'])

Я попытался сбросить "Неприсвоено "значение из района:

canada=canada.Borough.drop("Not assigned",axis=0)

, но оно показало:" ['Не назначено'] не найдено по оси "

Вот ожидаемые результаты моих очищенных данных: 1.Игнорировать ячейки со значением «Не назначено» в городке 2. Для районов с тем же Почтовым индексом и Районом они должны отображаться в одной строке и отделяться запятой 3. Если ячейка имеет район, но район «Не назначен», район.будет таким же, как в округе

. Кроме того, я заметил, что таблица, которую я очистил, содержала "\ n" в конце каждого значения в Соседстве.Есть ли какие-либо коды, которые я должен добавить в процессе очистки, чтобы избавиться от него?

Большое спасибо за вашу помощь заранее.

1 Ответ

0 голосов
/ 08 апреля 2019

Это выглядит немного затянуто.

import pandas as pd

tables = pd.read_html('https://en.wikipedia.org/wiki/List_of_postal_codes_of_Canada:_M')
canada = tables[0]
canada.columns = canada.iloc[0]
canada = canada.iloc[1:]
canada = canada[canada.Borough != 'Not assigned']
canada['Neighbourhood'].loc[canada['Neighbourhood'] == 'Not assigned'] =  canada.Borough
canada['Location'] = canada.Borough + ', ' + canada.Neighbourhood
canada.drop(['Borough', 'Neighbourhood'], axis=1, inplace = True)
canada.reset_index(drop=True)

Ссылки:

https://stackoverflow.com/a/49161313/6241235

Edit:

Я думаю, что точка зрения @ bubble о поиске без учета регистра является хорошей, когда они говорят canada = canada[canada.loc[:, 'Borough'].str.contains('Not assigned', case=False)], но я об этом не думал)

...