簡體   English   中英

將數據放入 pandas dataframe 時遇到問題

[英]Having trouble putting data into a pandas dataframe

我是編碼新手,所以請放輕松。 我最近開始了一個寵物項目,它從表中抓取數據並將為我創建數據的 csv,我相信我已經成功提取數據,但試圖將其放入 dataframe 返回錯誤“傳遞值的形狀是( 31719, 1),索引暗示 (31719. 23)",我嘗試查看標題和行的長度,這些數字是正確的。 但是當我嘗試將它放入 dataframe 時,它似乎只是將一列拉入 dataframe,同樣,我對這一切都很陌生,但希望有任何幫助! 下面的代碼

from bs4 import BeautifulSoup
from pandas.core.frame import DataFrame
import requests
import pandas as pd
url = 'https://www.fangraphs.com/leaders.aspx? pos=all&stats=bat&lg=all&qual=0&type=8&season=2018&month=0&season1=2018&ind=0&page=1_1500'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
#pulling table from HTML
Table1 = soup.find('table', id = 'LeaderBoard1_dg1_ctl00')
#finding and filling table columns
headers = []
for i in Table1.find_all('th'):
    title = i.text
    headers.append(title)
#finding and filling table rows
rows = []
for j in Table1.find_all('td'):
    data = j.text
    rows.append(data)
#filling dataframe
df = pd.DataFrame(rows, columns = headers)
#show dataframe
print(df)

您正在創建一個具有 692 行 23 列的 dataframe 作為新的 dataframe。 但是查看行數組,您只有一維數組,因此傳遞值的形狀與索引不匹配。 您將 692 x 1 傳遞給 692 x 23 的 dataframe 將不起作用。

如果你想用你擁有的數據創建,你應該只使用:

df=pd.DataFrame(rows, columns=headers[1:2])

或者,您可以使用pandas.read_html直接實現您的目標,該文件由 BeautifulSoup 為您處理數據:

pd.read_html(url, attrs={'id':'LeaderBoard1_dg1_ctl00'}, header=[1])[0].iloc[:-1]
  • attrs={'id':'LeaderBoard1_dg1_ctl00'}按id選擇表

  • header=[1]調整 header 導致有多個標題

  • .iloc[:-1]使用分頁刪除表格頁腳

例子

import pandas as pd

pd.read_html('https://www.fangraphs.com/leaders.aspx?pos=all&stats=bat&lg=all&qual=0&type=8&season=2018&month=0&season1=2018&ind=0&page=1_1500',
            attrs={'id':'LeaderBoard1_dg1_ctl00'},
            header=[1])[0]\
            .iloc[:-1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM