如何将DataFrame的price列转为数值格式并正确导出至Excel?
问题解决办法
你的问题出在导出Excel的顺序搞反了,而且数值转换的操作没生效,具体问题和修正方案如下:
核心错误点
- 你先把原始的DataFrame(price是字符串格式)导出成Excel了,之后才做数值转换,等于白忙活,导出的文件自然还是字符串格式。
- 第二次调用
df.apply(pd.to_numeric, errors='ignore')没有赋值给变量,这行代码完全没用。 - 没必要给整个DataFrame转数值,
symbol列本来就是字符串,只需要处理price列就行。
修正后的代码
# Import required modules import requests from bs4 import BeautifulSoup import time import pandas as pd # Get data from webpage mystocks = ['GOOG', 'META', 'MSFT', 'PLTR', 'TSLA', 'ZS', 'PYPL', 'SHOP', 'TTCF'] def getData(symbol): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'} url = f'https://finance.yahoo.com/quote/{symbol}' r = requests.get(url, headers=headers) soup = BeautifulSoup(r.text, 'html.parser') stock = { 'symbol': symbol, 'price': soup.find('div', {'class':'D(ib) Mend(20px)'}).find_all('fin-streamer')[0].text, } return stock def export_data(stockdata): df = pd.DataFrame(stockdata) # 只转换price列为数值,errors='coerce'可把转换失败的内容设为NaN,方便排查异常 df['price'] = pd.to_numeric(df['price'], errors='coerce') # 转换完成后再导出Excel,index=False去掉默认索引列,数据更整洁 df.to_excel("LETS GO2.xlsx", index=False) if __name__ == '__main__': while True: stockdata = [] for item in mystocks: print(item) stockdata.append(getData(item)) export_data(stockdata) time_wait = 10 print(f'Waiting {time_wait} minutes...') time.sleep(time_wait * 60)
额外说明
- 用
errors='coerce'可以捕捉转换失败的情况,比如price里出现非数字字符时会自动转为NaN,方便后续排查异常数据。 - 导出时添加
index=False,可以避免Excel中多出一列无意义的默认索引,让导出的数据更规整。
内容的提问来源于stack exchange,提问作者TJK
相关产品推荐
相关产品推荐

