【问题标题】:How can I convert my "price" column from string to number format?如何将我的“价格”列从字符串格式转换为数字格式?
【发布时间】:2022-11-20 22:08:25
【问题描述】:
# 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)
    df.to_excel("LETS GO2.xlsx")
    df = df.apply(pd.to_numeric)
    df.apply(pd.to_numeric, errors='ignore')  

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)

我需要将“价格”列转换为数字格式,但解决方案 df["A"] = pd.to_numeric(df["A"]) 不起作用...不再出现错误(这可能是我的代码的问题),但导出的 excel 未返回数字请求的数据类型。

感谢所有帮助,谢谢!

【问题讨论】:

  • 您可能有一些错误的非数字值,您可以尝试使用 Pandas 和参数 errors='coerce' 将它们转换为 null。这会将任何错误的非数值转换为NaN。试试df["A"] = pd.to_numeric(df["A"], errors='coerce')
  • 是的,我也尝试过,但没有成功……这消除了“无法解析字符串”错误,但仍然导致价格列导出为文本。谢谢您的帮助!
  • 始终将有问题的完整错误消息(从单词“Traceback”开始)(不在 cmets 中)作为文本(不是屏幕截图,不是指向外部门户的链接)。完整的错误/回溯中还有其他有用的信息。
  • 首先编辑问题并使用正确的缩进放置代码。接下来在问题的正文中描述问题,而不是在标题中。最后显示有问题的完整错误消息。
  • 感谢您的反馈,现在应该修复这些问题,但请听听您的想法

标签: python


【解决方案1】:

像这样做。

import pandas as pd  
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import scipy.optimize as sco
import datetime as dt
import math
from datetime import datetime, timedelta
from pandas_datareader import data as wb
from sklearn.cluster import KMeans
np.random.seed(777)


start = '2018-06-30'
end = '2020-06-30'
# N = 90
# start = datetime.now() - timedelta(days=N)
# end = dt.datetime.today()



tickers = ['AXP','AAPL','BA','CAT','CSCO','CVX','XOM','GS','HD','IBM','INTC','JNJ','KO','JPM','MCD','MMM','MRK','MSFT','NKE','PFE','PG','TRV','UNH','RTX','VZ','V','WBA','WMT','DIS','DOW']

thelen = len(tickers)

price_data = []
for ticker in tickers:
    prices = wb.DataReader(ticker, start = start, end = end, data_source='yahoo')[['Adj Close']]
    price_data.append(prices.assign(ticker=ticker)[['ticker', 'Adj Close']])

df = pd.concat(price_data)
df.dtypes
df.head()
df.shape

pd.set_option('display.max_columns', 500)

df = df.reset_index()
df = df.set_index('Date')
table = df.pivot(columns='ticker')
# By specifying col[1] in below list comprehension
# You can select the stock names under multi-level column
table.columns = [col[1] for col in table.columns]
table.head()

这就是你得到的。

【讨论】:

    猜你喜欢
    • 2016-12-23
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 2012-06-07
    相关资源
    最近更新 更多