Je dois graver une table wikipedia dans un bloc de données pandas et créer trois colonnes: PostalCode, Borough et Neighborhoods.
https://en.wikipedia.org/wiki/List_of_postal_codes_of_Canada:_M
Voici le code que j'ai utilisé:
(PostalCode, Borough, Neighborhood) 0 North York 1 Parkwoods 2 North York 3 Victoria Village 4 Downtown Toronto 5 Harbourfront (Toronto) 6 Downtown Toronto 7 Regent Park 8 North York
Et il renvoie que:
import requests 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 links = My_table.findAll('a') links Neighbourhood = [ ] for link in links: Neighbourhood.append(link.get('title')) print (Neighbourhood) import pandas as pd df = pd.DataFrame([]) df['PostalCode', 'Borough', 'Neighborhood'] = Neighbourhood df
Je ne peux pas comprendre comment récupérer le code postal et le quartier à partir de la table wikipedia. p>
Merci
5 Réponses :
Fournissez le message d'erreur. En le regardant, vous avez d'abord df ['Neighborhoods'] = Quartiers où votre liste porte le nom Quartiers .
Vous avez deux petites erreurs:
df = pd.dataframe ()
doit être df = pd.DataFrame ([])
Vous avez également mal orthographié Quartiers
en tant que Quartiers
la deuxième fois.
Vous devrez peut-être également remplacer soup = BeautifulSoup (website_url, 'lxml')
par soup = BeautifulSoup (website_url, 'xml')
, mais nous ne pouvons pas vous aider davantage sans connaître votre message d'erreur exact.
Au lieu d'utiliser
df = pd.Dataframe(list_of_lists)
Vous pouvez utiliser
df['Neighbourhoods'] = pd.Series(Neighbourhoods)
Cela résoudrait votre erreur et ajouterait de nouvelles colonnes de la même manière en utilisant pd.Series ( listname) ou vous pouvez donner une liste de listes contenant PostalCode, Borough, and Neighborhoods en utilisant ce code
df = pd.dataframe() df['Neighbourhoods'] = Neighbourhoods
Il semble que vous ne preniez qu'une seule des colonnes ici:
v = [] for tr in values: td = tr.find_all('td') row = [i.text for i in td] v.append(row) df = pd.DataFrame.from_records(v)
Vous devriez rechercher 'tr'
plutôt que ' a '
car cela signifie une nouvelle ligne dans le tableau.
Vous devriez alors utiliser une boucle for pour remplir une liste de listes, ce code devrait fonctionner:
links = My_table.findAll('a')
Veuillez inclure le message d'erreur dans votre question. :)