Python实现yfinance返回股票代码与上市公司名称的匹配方法
实现方案
你可以先构建股票代码到公司名称的映射字典,再按CSV/yfinance返回的升序代码顺序匹配输出即可,具体代码如下:
步骤1:构建代码-公司名映射字典
使用正则精准拆分原始公司条目,避免公司名含数字导致的代码匹配错误:
import re code_company_map = {} for item in company_list: # 匹配括号内的4位股票代码和后面的公司全称 match_result = re.match(r'.*\((\d+)\)(.*)', item) if match_result: stock_code = match_result.group(1) full_code = f"{stock_code}.KL" company_name = match_result.group(2).strip() code_company_map[full_code] = company_name
步骤2:按升序顺序匹配输出
两种获取排序后代码的方式,按需选择即可:
方式1:直接用yfinance返回的已排序列(无需读CSV)
你调用sto_data返回的stocks_adj_close的列本身就是yfinance自动升序排列的代码:
# 拿到排序后的代码列表 sorted_codes = stocks_adj_close.columns.tolist() # 按要求格式输出 for code in sorted_codes: print(f"{code} - {code_company_map[code]}")
方式2:从已导出的CSV读取表头顺序
如果已经导出了CSV文件,可以只加载表头获取排序后的代码,效率更高:
import pandas as pd # nrows=0表示只读取表头,不加载数据 csv_header = pd.read_csv("你的CSV文件路径.csv", nrows=0) # 过滤掉日期列,剩下的就是升序排列的股票代码 sorted_codes = [col for col in csv_header.columns if col != "Date"] # 按要求格式输出 for code in sorted_codes: print(f"{code} - {code_company_map[code]}")
输出示例
运行后即可得到你需要的格式:
0011.KL - ACEBRITE-TECH BERHAD 3069.KL - MAINMEGA FIRST CORPORATION BERHAD 4677.KL - MAINYTL CORPORATION BERHAD ...
优化版:直接整合到原有函数
你也可以把匹配逻辑直接加到原来的sto_data函数里,调用时直接输出结果:
import re import yfinance as yf def sto_data(start, end, adj_close_fname): sto_code = [] code_company_map = {} for item in company_list: match_result = re.match(r'.*\((\d+)\)(.*)', item) if match_result: stock_code = match_result.group(1) full_code = f"{stock_code}.KL" sto_code.append(full_code) code_company_map[full_code] = match_result.group(2).strip() stocks_data = yf.download(sto_code,start=start, end=end) stocks_adj_close = stocks_data['Adj Close'] stocks_adj_close.to_csv(adj_close_fname) # 直接输出排序后的匹配结果 for code in stocks_adj_close.columns: print(f"{code} - {code_company_map[code]}") return stocks_adj_close, code_company_map
内容的提问来源于stack exchange,提问作者user16836078
相关产品推荐
相关产品推荐

