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. :)