2
votes

Grattage de la table wikipedia en trame de données pandas

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


1 commentaires

Veuillez inclure le message d'erreur dans votre question. :)


5 Réponses :


0
votes

Fournissez le message d'erreur. En le regardant, vous avez d'abord df ['Neighborhoods'] = Quartiers où votre liste porte le nom Quartiers .


0 commentaires

0
votes

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.


0 commentaires

0
votes

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


0 commentaires

0
votes

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')


0 commentaires

7
votes

les pandas vous permettent de le faire en une seule ligne de code:

df = pd.read_html ('https://en.wikipedia.org/wiki/List_of_postal_codes_of_Canada:_M') [0]

 entrez la description de l'image ici


0 commentaires