yfinance数据处理:含空格Sector列拆分后合并报错求助
解决股票数据Sector字段拆分问题
问题描述
使用yfinance获取股票数据时,通过空格拼接字段生成字符串,再用str.split()拆分后,带空格的Sector字段(如“Communication Services”)被拆分为“Sector”和“Sector1”两列,尝试手动合并时出现属性或字符串错误,无法得到完整的Sector列。
错误原因
以空格作为字段分隔符拼接数据,而部分Sector字段本身包含空格,导致str.split()默认按任意空格拆分时,将单个Sector字段拆分为多列;后续手动合并时因列值类型不一致或空值处理不当引发错误。
解决方案
方案1:从根源避免拆分(推荐)
改用不含空格的分隔符(如|)拼接字段,确保Sector字段作为整体被保留:
修改代码如下:
import yfinance as yf import pandas as pd from concurrent.futures import ThreadPoolExecutor list_of_futures = [] def get_stats(ticker): info = yf.Tickers(ticker).tickers[ticker].info # 用|作为分隔符,替换原来的空格 s = f"{ticker}|{info['currentPrice']}|{info['marketCap']}|{info['sector']}" list_of_futures.append(s) ticker_list = ['AAPL', 'ORCL', 'GTBIF', 'META'] with ThreadPoolExecutor() as executor: executor.map(get_stats, ticker_list) ( pd.DataFrame(list_of_futures) [0].str.split('|', expand=True) # 指定分隔符为| .rename(columns={0: "Ticker", 1: "Price", 2: "Market Cap", 3: "Sector"}) .to_excel("yahoo_futures.xlsx", index=False) )
方案2:合并已拆分的列
如果已经生成了拆分后的DataFrame,可通过合并列值的方式恢复完整Sector:
import yfinance as yf import pandas as pd from concurrent.futures import ThreadPoolExecutor list_of_futures = [] def get_stats(ticker): info = yf.Tickers(ticker).tickers[ticker].info s = f"{ticker} {info['currentPrice']} {info['marketCap']} {info['sector']}" list_of_futures.append(s) ticker_list = ['AAPL', 'ORCL', 'GTBIF', 'META'] with ThreadPoolExecutor() as executor: executor.map(get_stats, ticker_list) # 处理拆分后的列 df = pd.DataFrame(list_of_futures)[0].str.split(expand=True) # 合并Sector相关列,处理空值避免多余空格 df['Sector'] = df.apply(lambda row: ' '.join([str(row[col]) for col in range(3, df.shape[1]) if pd.notna(row[col])]), axis=1) # 重命名其他列并保留需要的字段 df = df.rename(columns={0: "Ticker", 1: "Price", 2: "Market Cap"})[["Ticker", "Price", "Market Cap", "Sector"]] df.to_excel("yahoo_futures.xlsx", index=False)
内容的提问来源于stack exchange,提问作者user3444610
相关产品推荐
相关产品推荐

