You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:20:48