我正在使用 yfinance.download 来获取一堆股票的数据,并且我可以使用返回的 pandas 数据框来处理这些股票。
我想从我的数据框中删除特定股票,但我无法...
重现的最低代码:
# several stocks for testing purposes, get dataframe
tickers = ['AAPL', 'TSLA', 'AMZN', 'GOOGL', 'MSFT', 'META', 'NVDA', 'PYPL', 'ADBE', 'NFLX']
data = yf.download(tickers, period="1y", interval="1wk", group_by='ticker')
print(data.columns.levels[0])
# trying to remove the first one of these level 0 columns...
data = data.drop(columns=data.columns.levels[0][0], axis=1, level=0, inplace=False)
print(data.columns.levels[0])
如您所见,AAPL 保留在第一个输出和第二个输出中。不知道为什么不被删除。
我也尝试过使用
inplace=True
并且不分配给数据,但我仍然遇到同样的问题。
如果还有什么我可以为你们提供的,请告诉我,提前谢谢。
当您删除列时,pandas 不会自动清理 MultiIndex 中未使用的级别。即使不再使用,这些级别仍然包含所有原始值。
如果打印
df.columns
,您可以看到请求的“AAPL”已被删除。
要更新 df.columns.levels
返回的 FrozenList,您需要删除未使用的级别。
tickers = ['AAPL', 'TSLA', 'AMZN', 'GOOGL', 'MSFT', 'META', 'NVDA', 'PYPL', 'ADBE', 'NFLX']
data = yf.download(tickers, period="1y", interval="1wk", group_by='ticker')
# I have changed the code here for readability.
data = data.drop(columns="AAPL", axis=1, level=0)
data.columns = data.columns.remove_unused_levels()