从公司名称获取股票代码(非标准)Pandas
Get Stock Ticker from Company Name (Non Standard) Pandas
给定一个公司名称(非标准后缀和形式),我想在我的 df
中创建一个新列,其中包含其股票代码。我可以根据另一个查找/键 table 提取代码,但每个公司名称的形式在 table 之间不是 100% 一致。
我有两个数据集:
1. 姓名列表 ( df
)
2. 代码到名称的映射 ( dfKey
)
两家公司的名称并不总是相同的,所以我做不到df['Ticker']=np.where(df['companyName']==dfKey['companyName'],dfKey['Ticker'].NaN)
即使是我能得到 70-90% 正确率的解决方案也足够好(我的真实数据集是数千家公司,只有一些数据比 none 好;有些像 Salesforce 一样无法解码来自客户关系管理)。
我的样本 df
s:
import numpy as np
import pandas as pd
raw_data = {
'companyName1': ['General Electric','NVIDA Corporation', 'Blizzard', 'CRM', 'Google', 'Tesla']}
df = pd.DataFrame(raw_data , columns = ['companyName1'])
#dfKey.set_index('Code', inplace=True) #Set Code as Row Index
print(df)
raw_dataKey = {'Ticker': ['GE','NVID', 'ATVI', 'CRM', 'GOOGL', 'TSLA'],
'companyName2': ['General Electric Company','NVIDA Corp', 'Activision', 'SalesForce', 'Google', 'Tesla Inc']}
dfKey = pd.DataFrame(raw_dataKey , columns = ['Ticker', 'companyName2'])
#dfKey.set_index('Code', inplace=True) #Set Code as Row Index
print(dfKey)
期望的输出:
companyName1 Ticker
0 General Electric GE
1 NVIDA Corporation NVID
2 Activision Blizzard ATVI
3 CRM NaN
4 Google GOOG
5 Tesla TSLA
我已经尝试过某种形式的拆分每个词然后比较第一个词(这应该是一个足够好的解决方案)但我一直对如何处理数据帧中的列表感到困惑。
df['companyNameSplit'] = df['companyName'].str.split(' ')
我也试过修改 URL 电话,坚持输入公司名称,但无济于事,只是想看看我得到了什么
( a la Getting stock symbol from company name )
import urllib
url='http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=Thomas%20Scott&callback=YAHOO.Finance.SymbolSuggest.ssCallback'
data = urllib.request.urlopen(url).read()
我还缺少其他想法吗?
以下是匹配公司名称第一个单词的方法:
In [36]: df['first_word'] = df.companyName1.str.split(' ').str[0]
In [37]: dfKey['first_word'] = dfKey.companyName2.str.split(' ').str[0]
In [38]: pd.merge(df, dfKey, on='first_word', how='outer')
Out[38]:
companyName1 first_word Ticker companyName2
0 General Electric General GE General Electric Company
1 NVIDA Corporation NVIDA NVID NVIDA Corp
2 Blizzard Blizzard NaN NaN
3 CRM CRM NaN NaN
4 Google Google GOOGL Google
5 Tesla Tesla TSLA Tesla Inc
6 NaN Activision ATVI Activision
7 NaN SalesForce CRM SalesForce
假设我必须映射以下两家公司
1.Instructions 商用机器
2.National 纽约市银行
因为从结果中我们可以看到第一个单词 International 与大多数行情匹配并且它出现了。
结果:只考虑前几行
Ticker companyName1
0 NaN IBM
1 IBM 国际商业机器公司
2 家 IFF 国际商用机器公司
3台IGT国际商用机器
4 所 INSW 国际商业机器
5台IP国际商务机
6 NaN Google
7 纽约市 NBHC 国家银行
8 纽约市 NFG 国家银行
9 纽约市 NGG 国家银行
10 纽约市 NHI 国家银行
给定一个公司名称(非标准后缀和形式),我想在我的 df
中创建一个新列,其中包含其股票代码。我可以根据另一个查找/键 table 提取代码,但每个公司名称的形式在 table 之间不是 100% 一致。
我有两个数据集:
1. 姓名列表 ( df
)
2. 代码到名称的映射 ( dfKey
)
两家公司的名称并不总是相同的,所以我做不到df['Ticker']=np.where(df['companyName']==dfKey['companyName'],dfKey['Ticker'].NaN)
即使是我能得到 70-90% 正确率的解决方案也足够好(我的真实数据集是数千家公司,只有一些数据比 none 好;有些像 Salesforce 一样无法解码来自客户关系管理)。
我的样本 df
s:
import numpy as np
import pandas as pd
raw_data = {
'companyName1': ['General Electric','NVIDA Corporation', 'Blizzard', 'CRM', 'Google', 'Tesla']}
df = pd.DataFrame(raw_data , columns = ['companyName1'])
#dfKey.set_index('Code', inplace=True) #Set Code as Row Index
print(df)
raw_dataKey = {'Ticker': ['GE','NVID', 'ATVI', 'CRM', 'GOOGL', 'TSLA'],
'companyName2': ['General Electric Company','NVIDA Corp', 'Activision', 'SalesForce', 'Google', 'Tesla Inc']}
dfKey = pd.DataFrame(raw_dataKey , columns = ['Ticker', 'companyName2'])
#dfKey.set_index('Code', inplace=True) #Set Code as Row Index
print(dfKey)
期望的输出:
companyName1 Ticker
0 General Electric GE
1 NVIDA Corporation NVID
2 Activision Blizzard ATVI
3 CRM NaN
4 Google GOOG
5 Tesla TSLA
我已经尝试过某种形式的拆分每个词然后比较第一个词(这应该是一个足够好的解决方案)但我一直对如何处理数据帧中的列表感到困惑。
df['companyNameSplit'] = df['companyName'].str.split(' ')
我也试过修改 URL 电话,坚持输入公司名称,但无济于事,只是想看看我得到了什么 ( a la Getting stock symbol from company name )
import urllib
url='http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=Thomas%20Scott&callback=YAHOO.Finance.SymbolSuggest.ssCallback'
data = urllib.request.urlopen(url).read()
我还缺少其他想法吗?
以下是匹配公司名称第一个单词的方法:
In [36]: df['first_word'] = df.companyName1.str.split(' ').str[0]
In [37]: dfKey['first_word'] = dfKey.companyName2.str.split(' ').str[0]
In [38]: pd.merge(df, dfKey, on='first_word', how='outer')
Out[38]:
companyName1 first_word Ticker companyName2
0 General Electric General GE General Electric Company
1 NVIDA Corporation NVIDA NVID NVIDA Corp
2 Blizzard Blizzard NaN NaN
3 CRM CRM NaN NaN
4 Google Google GOOGL Google
5 Tesla Tesla TSLA Tesla Inc
6 NaN Activision ATVI Activision
7 NaN SalesForce CRM SalesForce
假设我必须映射以下两家公司
1.Instructions 商用机器 2.National 纽约市银行
因为从结果中我们可以看到第一个单词 International 与大多数行情匹配并且它出现了。
结果:只考虑前几行
Ticker companyName1
0 NaN IBM
1 IBM 国际商业机器公司
2 家 IFF 国际商用机器公司
3台IGT国际商用机器
4 所 INSW 国际商业机器
5台IP国际商务机
6 NaN Google
7 纽约市 NBHC 国家银行
8 纽约市 NFG 国家银行
9 纽约市 NGG 国家银行
10 纽约市 NHI 国家银行