如何从DataFrame中提取AAPL与SPY的Close列?
解决多级列索引DataFrame的列筛选问题
你的错误根源在于对列索引类型的误解:这个DataFrame采用的是多级列索引(MultiIndex),列名是两层元组结构(比如('Close', 'AAPL')),而不是你拼接出来的'CloseAAPL'或'Close SPY'这类单级字符串索引,所以直接用拼接后的字符串会触发KeyError。
下面是几种可行的解决方案:
方法1:直接指定多级列的元组列表
直接用元组明确每一列的两层索引,这是最直接的方式:
# 用元组指定要选择的列 data = data[[('Close', 'AAPL'), ('Close', 'SPY')]]
方法2:用xs方法提取指定指标列后筛选标的
先提取所有Close指标的列,再从中选择AAPL和SPY:
# 提取第一层索引为Close的所有列 close_data = data.xs('Close', axis=1, level=0) # 只保留AAPL和SPY的列 data = close_data[['AAPL', 'SPY']]
如果需要保留原有的多级列结构,可以在xs中添加drop_level=False参数:
data = data.xs('Close', axis=1, level=0, drop_level=False)[[('Close', 'AAPL'), ('Close', 'SPY')]]
方法3:通过列索引条件批量筛选
用get_level_values方法筛选符合条件的列:
# 筛选第一层是Close、第二层是AAPL或SPY的列 mask = (data.columns.get_level_values(0) == 'Close') & (data.columns.get_level_values(1).isin(['AAPL', 'SPY'])) data = data.loc[:, mask]
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

