You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何切片未整理的Pandas原始DataFrame?(基于晨星股票数据)

嘿,我看你拿到了一个带**双层索引(MultiIndex)**的Pandas DataFrame——从Morningstar导入的股票数据对吧?这种结构处理多只股票的时序数据很方便,我给你分享几个实用的切片方法,帮你快速提取需要的内容:

1. 按指定股票(Symbol)切片

如果只想提取某一只股票的全部数据,用loc方法最直接:

# 提取AAPL的所有数据
aapl_data = df.loc['AAPL']

要是需要多只股票,比如同时取AAPL和MSFT,只要把股票代码放进列表里就行:

# 提取多只股票的全部数据
selected_stocks = df.loc[['AAPL', 'MSFT']]

2. 按日期范围切片

如果想提取某段时间内所有股票的数据,可以用slice来指定日期区间,配合slice(None)匹配所有股票:

# 提取2018年3月1日到2018年3月5日的所有股票数据
date_range_data = df.loc[(slice(None), slice('2018-03-01', '2018-03-05')), :]

3. 同时按股票和日期精准切片

要是想定位某只股票的特定日期范围数据,直接把股票代码和日期切片组合起来就行:

# 提取AAPL在2018年3月1日到3月3日的数据
aapl_march_slice = df.loc[('AAPL', slice('2018-03-01', '2018-03-03')), :]

另外还有个更简洁的方法xs(cross-section),专门用来提取多层索引的截面数据:

# 用xs提取AAPL的所有数据
aapl_data = df.xs('AAPL', level='Symbol')

# 提取所有股票在2018-03-01当天的数据
all_stocks_march_first = df.xs('2018-03-01', level='Date')

4. 结合列切片提取特定字段

如果只需要某几个字段(比如Close和Volume),可以在切片时指定列名:

# 提取AAPL的收盘价和成交量数据
aapl_close_volume = df.loc['AAPL', ['Close', 'Volume']]

小提示:如果你的索引顺序不是Symbol在前、Date在后,可以用df.swaplevel()调整顺序,或者在xs里用level=0/level=1来指定索引层级。

内容的提问来源于stack exchange,提问作者citizen007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:10:57