[英]Python add data to an empty pd.Dataframe
我對 python 很陌生,我想做的是從網站獲取數據並將網頁的一部分添加到 pandas dataframe。
這是我已經得到的代碼,但是在將數據添加到 Dataframe 時出現錯誤。
我得到的代碼:
url = 'https://oldschool.runescape.wiki/w/Module:Exchange/Anglerfish/Data'
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
price_data = soup.find_all('span', class_='s1')
df = pd.DataFrame()
for data in price_data:
a = pd.DataFrame(data.text.split(":")[0],data.text.split(":")[1])
df.append(a)
print(df)
我得到的錯誤:
ValueError Traceback (most recent call last)
<ipython-input-33-963d51917cf2> in <module>()
10
11 for data in price_data:
---> 12 a = pd.DataFrame(data.text.split(":")[0],data.text.split(":")[1])
13 df.append(a)
14
/usr/local/lib/python3.6/dist-packages/pandas/core/frame.py in __init__(self, data, index, columns, dtype, copy)
507 )
508 else:
--> 509 raise ValueError("DataFrame constructor not properly called!")
510
511 NDFrame.__init__(self, mgr, fastpath=True)
ValueError: DataFrame constructor not properly called!
您從data.text.split(":")[0],data.text.split(":")[1]
獲得的數據結構似乎不符合 function pd.DataFrame()
的預期. 首先查看 function 的文檔,以充分了解預期內容以及如何正確地將數據傳遞給它。 您可以傳遞包含列名和值的字典(數組必須等長,或者應指定索引),或者YOBEN_S建議的列表/數組,例如:
a = pd.DataFrame({'Column_1':data.text.split(":")[0],'Column_2':data.text.split(":")[1]})
由於您正在處理html
數據,因此您應該嘗試使用pandas.read_html()
的不同方法,可以在此處閱讀以獲取更多信息
通過以下方式修復您的代碼
pd.DataFrame([[data.text.split(":")[0],data.text.split(":")[1]]])
我做了一些更多的研究,對我來說最好的方法是:
#get data from marketwatch
url = 'https://oldschool.runescape.wiki/w/Module:Exchange/Anglerfish/Data'
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
price_data = soup.find_all('span', class_='s1')
df = pd.DataFrame(columns=['timestamp', 'price'])
for data in price_data:
df = df.append({'timestamp': data.text.split(":")[0], 'price': data.text.split(":")[1]}, ignore_index=True)
print(df)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.