如何打印 wikipedia table 中某一列下的所有值?

how to print all values under a column in wikipedia table?

我正在将维基百科 table 中的 COVID-19 数据抓取到 pandas 数据框中。当我在维基百科 table 中打印 cases 列时,我希望打印“cases”列下的所有值,但只有列中的最后一个值被打印在数据框中。这是我的代码 below.i 想要打印“案例”列下的所有值。请问我该怎么做?

import requests
from bs4 import BeautifulSoup
import pandas as pd
html= requests.get("https://en.wikipedia.org/wiki/COVID-19_pandemic_in_Nigeria")
bsObj= BeautifulSoup(html.content, 'html.parser')

for items in bsObj.find("table",{"class":"wikitable sortable"}).find_all('tr')[1:37]:
    data = items.find_all(['th',{"align":"left"},'td'])
    #print(data)
    state = data[0].a.text
    #print(state)
    cases = data[1].b.text
    #print(cases)

table= ({"STATES": [state],
       "CASES":[cases]})
tab= pd.DataFrame(table)
print(tab)

结果

    STATES   CASES
0   Kogi       3

您的循环会在每次迭代中覆盖目标值,这就是您只获取最后一行的原因。您需要将这些值存储在列表中,然后将它们转换为数据框。

因此将循环更改为:

states = []
cases = []
for items in bsObj.find("table",{"class":"wikitable sortable"}).find_all('tr')[1:37]:
    data = items.find_all(['th',{"align":"left"},'td'])
    states.append(data[0].a.text)
    cases.append( data[1].b.text)
columns = ['States','Cases']
tab = pd.DataFrame(list(zip(states, cases)), 
               columns =columns) 
tab 

输出:

    States  Cases
0   Lagos   8,177
1   FCT     1,489
2   Kano    1,182

等等