索引、查找和替换

问题描述 投票:0回答:1

我正在使用 yfinance 数据,它使用股票代码。然而,这些股票代码通常不容易识别。因此,在执行下载功能后,我尝试通过查找列表然后替换数据框中的原始股票代码来替换“股票代码”。我对字典和索引/替换概念相当陌生。谁能指出我正确的方向吗?

import yfinance as yf
import pandas as pd
import csv

tickerCsv = open('Stocks.csv', 'r')
reader = csv.reader(tickerCsv)
next(reader, None)  # skip the headers
tickers = {rows[0] for rows in reader}

data = yf.download(tickers, period='1mo', start="2009-01-01", end="2020-12-31", group_by='ticker')

close_prices = pd.DataFrame()

for ticker in tickers:
    close_prices[ticker] = data[ticker]['Adj Close']
    close_prices[ticker].replace(dict(zip(reader['Symbol'], reader['Name'])))

Stocks.csv 文件如下:

Stock tickers on the left, Name I would like to replace with after the yfinance download

python replace lookup
1个回答
0
投票

你的代码已经差不多了。我将使用 pandas 读取 csv 文件并生成符号/名称映射:

dd = pd.read_csv('Stocks.csv').set_index('Symbol')['Name'].to_dict()

输出:

{'C38U.SI': 'CICT', 'A17U.SI': 'CLAR', 'M44U.SI': 'MLT', 'ME8U.SI': 'MINT'}

那么

tickers
就是
dd
的键:

tickers = list(dd)

最后,您想要替换

close_prices
中的列名称,您可以这样做:

close_prices.columns = close_prices.columns.map(dd)

总共:

import yfinance as yf
import pandas as pd
import csv

dd = pd.read_csv('Stocks.csv').set_index('Symbol')['Name'].to_dict()
tickers = list(dd)

data = yf.download(tickers, period='1mo', start="2009-01-01", end="2020-12-31", group_by='ticker')

close_prices = pd.DataFrame()

for ticker in tickers:
    close_prices[ticker] = data[ticker]['Adj Close']

close_prices.columns = close_prices.columns.map(dd)

输出:

                CICT      CLAR       MLT      MINT
Date
2009-01-02  0.601655  0.538735  0.144619       NaN
2009-01-05  0.631185  0.600304  0.156840       NaN
2009-01-06  0.631185  0.615697  0.154804       NaN
2009-01-07  0.660713  0.596456  0.158877       NaN
2009-01-08  0.642258  0.577216  0.158877       NaN
...              ...       ...       ...       ...
2020-12-23  1.827041  2.496265  1.674264  2.397144
2020-12-24  1.810045  2.487803  1.691262  2.380439
2020-12-28  1.810045  2.487803  1.691262  2.380439
2020-12-29  1.835539  2.504726  1.691262  2.388792
2020-12-30  1.852535  2.547036  1.708259  2.413848

[3012 rows x 4 columns]
© www.soinside.com 2019 - 2024. All rights reserved.