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

手动调整股票拆分前Pandas DataFrame中的股价与成交量数据

增量更新股票数据并手动调整拆股前数据的实现

核心需求实现

下面是满足「增量更新CSV股票数据+手动修正拆股历史数据」的完整实现,解决了拆股对价格曲线、成交量计算的干扰问题:

完整代码

import yfinance as yf
import pandas as pd
from datetime import datetime

def update_stock_data(ticker, csv_path, split_coefficient):
    # 1. 增量更新数据逻辑
    try:
        # 读取已有CSV数据,获取最新记录日期
        existing_df = pd.read_csv(csv_path, parse_dates=['Date'], index_col='Date')
        last_record_date = existing_df.index[-1].strftime('%Y-%m-%d')
        # 仅下载最新日期之后的新数据
        new_data = yf.download(ticker, start=last_record_date)
        # 合并新数据并去重
        combined_df = pd.concat([existing_df, new_data]).drop_duplicates()
    except FileNotFoundError:
        # 首次运行,直接下载全量数据
        combined_df = yf.download(ticker)
    
    # 2. 手动调整拆股前的数据
    # 示例:手动指定拆股日期,实际可从yfinance自动获取拆股事件
    split_date = datetime(2022, 6, 1)
    # 拆分拆股前后数据集
    pre_split_df = combined_df[combined_df.index < split_date]
    post_split_df = combined_df[combined_df.index >= split_date]
    
    # 调整拆股前的价格与成交量
    price_cols = ['Open', 'High', 'Low', 'Close', 'Adj Close']
    pre_split_df[price_cols] = pre_split_df[price_cols] / split_coefficient
    pre_split_df['Volume'] = pre_split_df['Volume'] * split_coefficient
    
    # 合并处理后的数据集并排序
    final_df = pd.concat([pre_split_df, post_split_df]).sort_index()
    
    # 3. 保存更新后的数据到CSV
    final_df.to_csv(csv_path)
    print(f"数据已更新并保存至 {csv_path}")

# 使用示例:苹果2020年拆股系数为4(1拆4)
if __name__ == "__main__":
    update_stock_data('AAPL', 'aapl_stock_data.csv', split_coefficient=4)

关键逻辑说明

  • 增量更新:优先读取已有CSV的最新日期,只下载该日期之后的新数据,避免重复下载全量数据;首次运行则直接拉取全量数据。
  • 拆股修正:
    • 按拆股日期将数据集拆分为「拆股前」「拆股后」两部分
    • 拆股前的价格类字段除以拆股系数,成交量字段乘以拆股系数,保证数据前后口径统一
  • 数据去重:合并新旧数据时自动剔除重复记录,避免CSV中出现冗余数据

优化补充

实际场景中可以通过yfinance自动获取标的的拆股事件,无需手动指定日期和系数:

ticker_obj = yf.Ticker('AAPL')
# 获取所有拆股事件:索引为拆股日期,值为拆股系数
splits = ticker_obj.splits

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:05:06