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

如何获取每月最后交易日及对应股价?Pandas代码求助

解决每月最后一个交易日股价的获取问题

别担心,第一次用Pandas处理这类时间序列数据很容易踩小细节坑,我来帮你一步步搞定。

你目前的代码只完成了读取数据和设置索引的基础操作,缺少几个关键步骤,导致分组取最大日期的逻辑没生效。我们一步步来修正:

1. 先把日期列转成datetime类型

CSV文件里的date列默认读进来是字符串格式,Pandas没法正确识别日期的先后顺序,这是你之前分组失败的核心原因。所以第一步必须把它转成datetime类型:

import pandas as pd

# 读取数据时直接解析日期列,省得后续再转换
data = pd.read_csv('csv_file', parse_dates=['date'])

# 如果已经读入数据才想起转换,也可以用这行:
# data['date'] = pd.to_datetime(data['date'])

2. 设置日期为索引(可选,但更方便操作)

这一步你已经做了,确保日期是datetime类型后再设置索引:

data.set_index('date', inplace=True)

3. 提取每月最后一个交易日的数据

这里有两种简单可靠的方法,任选其一就行:

方法一:用resample快速实现(推荐)

Pandas的resample是专门处理时间序列频率转换的工具,'M'代表月末周期,last()会自动取每个月里最后一条存在的交易日数据:

# 直接按月份重采样,取每个月的最后一行数据
monthly_last_trade = data.resample('M').last()

方法二:手动分组取最大日期

如果你想手动实现“按月分组→找最大日期→提取对应行”的逻辑,可以这样写:

# 给数据添加一个「年月」列,用于分组依据
data['year_month'] = data.index.to_period('M')

# 按年月分组,筛选出每个组里日期最大的那一行
monthly_last_trade = data.groupby('year_month').apply(lambda x: x[x.index == x.index.max()])

# 最后可以删掉临时的年月列
monthly_last_trade.drop('year_month', axis=1, inplace=True)

验证结果

最后打印结果确认是不是你想要的每月最后交易日数据:

print(monthly_last_trade)

总结一下,你之前失败的主要原因是日期列没转成datetime类型,Pandas把字符串日期当成普通文本比较,自然没法正确找到每个月的最后一天。转成datetime后,不管用哪种方法都能轻松搞定~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:58:41