如何删除 yfinance.download 返回的 Pandas DataFrame 中的 0 级列

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

我正在使用 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])

我在控制台中看到的输出: Output

如您所见,AAPL 保留在第一个输出和第二个输出中。不知道为什么不被删除。

我也尝试过使用

inplace=True
并且不分配给数据,但我仍然遇到同样的问题。

如果还有什么我可以为你们提供的,请告诉我,提前谢谢。

python pandas dataframe yfinance
1个回答
0
投票

当您删除列时,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()

pandas.MultiIndex.remove_unused_levels

© www.soinside.com 2019 - 2024. All rights reserved.