如何从pandas DataFrame的描述字段中提取股票代码(Ticker)?
问题描述
我已经把以下数据转换成了pandas DataFrame:
{17: '200 shares ExD 2022-09-21 PD 2022-09-30 dividend GAIN.NASDAQ 15.00 USD (0.075 per share) tax -2.25 USD (-15.000%) DivCntry US USIncmCode 06', 18: '101 shares ExD 2022-09-21 PD 2022-09-30 dividend LTC.NYSE 19.19 USD (0.19 per share) tax -2.88 USD (-15.000%) DivCntry US USIncmCode 06', 19: '302 shares ExD 2022-09-29 PD 2022-10-12 dividend AGNC.NASDAQ 36.24 USD (0.12 per share) tax -5.44 USD (-15.000%) DivCntry US USIncmCode 06', 20: '92 shares ExD 2022-07-07 PD 2022-08-22 dividend BTI.NYSE 60.31 USD (0.655523 per share) tax -0.00 USD (-0.0%) DivCntry GB fee amount -0.46 USD (0.005 per share)', 21: '75 shares ExD 2022-09-14 PD 2022-10-11 dividend MO.NYSE 70.50 USD (0.94 per share) tax -10.58 USD (-15.000%) DivCntry US USIncmCode 06'}
我需要从中仅提取股票代码(比如GAIN.NASDAQ、LTC.NYSE这类),但当前的代码会返回整行描述:
import pandas as pd .... description = dividends[["Description"]] # 这是一个名为"Description"的DataFrame,每行内容如上所示 ticker = description[description['Description'].str.contains('.NYSE')] print(ticker)
请问该如何修改代码来只获取股票代码?
解决方案
可以用正则表达式配合pandas的str.extract()方法精准提取股票代码,因为股票代码的格式是「字母/数字组合+.+交易所代码」,比如GAIN.NASDAQ、LTC.NYSE,正则可以完美匹配这种模式。
方法1:提取所有交易所的股票代码
import pandas as pd # 假设你的主DataFrame是dividends,列名为"Description" dividends['Ticker'] = dividends['Description'].str.extract(r'(\w+\.(NYSE|NASDAQ))')[:, 0] # 提取后可单独取出股票代码列,去掉空值并转成列表 tickers = dividends['Ticker'].dropna().tolist() print(tickers)
- 正则
r'(\w+\.(NYSE|NASDAQ))':匹配一个或多个字母/数字(\w+),加上转义后的点号(\.),再匹配NYSE或NASDAQ;分组后取第一列就是完整的股票代码。 dropna()过滤匹配失败的空值,tolist()将结果转为列表格式。
方法2:只提取NYSE的股票代码
如果只需要筛选NYSE的代码,修改正则即可:
nyse_tickers = dividends['Description'].str.extract(r'(\w+\.NYSE)').dropna().squeeze().tolist() print(nyse_tickers)
squeeze()将单列DataFrame转换为Series,方便后续转成列表。
针对你现有代码的修改
如果description是你单独取出的dividends[["Description"]],直接对它操作:
description['Ticker'] = description['Description'].str.extract(r'(\w+\.(NYSE|NASDAQ))')[:, 0] # 打印提取出的股票代码 print(description['Ticker'].dropna())
内容的提问来源于stack exchange,提问作者Blaz
相关产品推荐
相关产品推荐

