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

如何从CSV股票数据文件提取指定股票指定月份的最后交易日

问题背景

你有一份存储了30年股票数据的CSV文件,数据样例如下:
Stocks
需求是提取指定股票、指定月份的最后一个交易日数据,比如股票s_0003在2018年6月的最后一个交易日数据。


代码问题诊断

你的代码核心错误是未将date列转换为日期类型就直接取最大值:CSV读取后的date列默认是字符串格式,字符串按字符逐位比较字典序,6/9/18的第三位字符9比6/30/18的第三位字符3大,因此max()返回了错误的日期。
额外可优化点:反复调用pd.to_datetime做重复转换,执行效率低,也没有必要单独拆分子表。


实现方案

方案1:修复原逻辑

import pandas as pd

df = pd.read_csv(stocks)
# 先统一转换日期格式,一次转换后续可反复使用
# 如果你的日期格式是日/月/年,需要加参数 dayfirst=True 避免解析错误
df['date'] = pd.to_datetime(df['date'])
# 一次性筛选2018年6月的目标股票数据
jun_data = df[(df['date'].dt.year == 2018) & (df['date'].dt.month == 6)]
# 取当月最大日期即为最后一个交易日
last_trade_day = jun_data['date'].max()
# 提取对应股票数据
s_0003_value = jun_data.loc[jun_data['date'] == last_trade_day, 's_0003'].iloc[0]

方案2:通用批量处理方案(推荐)

如果需要频繁查询不同股票、不同月份的最后交易日数据,可先对数据做预处理,后续查询更高效:

import pandas as pd

df = pd.read_csv(stocks)
df['date'] = pd.to_datetime(df['date'])
# 将日期设为索引并排序,为后续重采样做准备
df = df.set_index('date').sort_index()
# 按月重采样,直接保留每个月最后一条交易日的所有股票数据
monthly_last_data = df.resample('M').last()

# 查询2018年6月s_0003的最后交易日数据,直接取值即可
s_0003_value = monthly_last_data.loc['2018-06', 's_0003']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:06:03