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

如何使用pandas的merge功能将多支股票CSV文件合并为目标DataFrame

完全可以用merge功能实现,pandas的merge支持两两DataFrame合并,配合functools.reduce即可实现多个DataFrame的迭代合并,内连接的合并逻辑也正好匹配你要求的「仅保留所有股票共有日期交集」的规则,具体操作如下:

实现步骤
  1. 导入依赖库,读取目标文件夹下的所有csv文件
import pandas as pd
import os
from functools import reduce

# 替换为你存放csv文件的文件夹路径
csv_folder = "./stock_data"
# 获取所有csv格式文件
csv_list = [f for f in os.listdir(csv_folder) if f.endswith(".csv")]
  1. 逐个读取csv文件,计算单只股票的收益率,整理为待合并的结构
df_list = []
for csv_file in csv_list:
    # 从文件名提取股票代码
    symbol = csv_file.replace(".csv", "")
    # 读取csv并自动解析日期列为datetime格式
    stock_df = pd.read_csv(os.path.join(csv_folder, csv_file), parse_dates=["Date"])
    # 基于复权收盘价计算单日收益率,可根据需求调整收益率计算规则
    stock_df[symbol] = stock_df["Adj Close"].pct_change()
    # 仅保留后续合并需要的日期列、收益率列
    df_list.append(stock_df[["Date", symbol]])
  1. 迭代merge所有DataFrame得到最终结果
# 以Date为关联键,用内连接合并,自动保留所有股票共有的日期交集
final_df = reduce(
    lambda left_df, right_df: pd.merge(left_df, right_df, on="Date", how="inner"),
    df_list
)
结果说明

最终得到的final_df结构完全符合你的要求:

  • 第一列为Date日期列
  • 剩余100列对应每个股票代码,列值为对应股票的收益率
  • 所有行的日期都是100只股票共同存在的交集日期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:57:02