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

如何修复向Pandas DataFrame追加不同长度列时的报错?

修复"Columns must be same length as key"报错方案

你遇到的这个报错,核心原因是各股票数据的日期范围不一致,导致提取的Adjusted_close列长度各不相同,而空的portfolio DataFrame没有预设索引,直接赋值时pandas没法匹配行长度,所以抛出了这个错误。下面给你两种实用的修复方案:

方案1:用pd.concat批量合并(推荐)

把所有股票的Adjusted_close列整理成字典,用concat按日期索引自动对齐合并,不同日期的缺口会自动填充NaN,代码更简洁:

import pandas as pd

# 替换成你的50家公司股票代码列表
tickers = ["AAPL", "MSFT", "GOOG", ...]
adjusted_close_dict = {}

for ticker in tickers:
    # 替换成你的股票数据下载/读取逻辑(比如yfinance或本地CSV)
    stock_df = pd.read_csv(f"{ticker}_stock_data.csv")
    # 将日期设为索引,确保合并时按日期对齐
    stock_df["Date"] = pd.to_datetime(stock_df["Date"])
    stock_df.set_index("Date", inplace=True)
    # 提取Adjusted_close列存入字典,键为股票代码
    adjusted_close_dict[ticker] = stock_df["Adjusted_close"]

# 按列合并所有数据,自动对齐日期索引
portfolio = pd.concat(adjusted_close_dict, axis=1)
# 把列名设置为股票代码(可选,让表格更直观)
portfolio.columns = tickers

方案2:手动统一索引后逐步添加列

如果需要分步构建portfolio,可以先收集所有股票的日期并集作为统一索引,再逐个添加列并对齐:

import pandas as pd
from functools import reduce

tickers = ["AAPL", "MSFT", "GOOG", ...]
all_dates = []

# 第一步:收集所有股票的日期,生成日期并集
for ticker in tickers:
    stock_df = pd.read_csv(f"{ticker}_stock_data.csv")
    # 转换日期格式并收集
    all_dates.append(pd.to_datetime(stock_df["Date"]))

# 合并所有日期并去重、排序
combined_dates = pd.Series(reduce(lambda x, y: x.union(y), all_dates)).sort_values()

# 用统一日期初始化portfolio
portfolio = pd.DataFrame(index=combined_dates)

# 第二步:逐个添加Adjusted_close列,对齐索引
for ticker in tickers:
    stock_df = pd.read_csv(f"{ticker}_stock_data.csv")
    stock_df["Date"] = pd.to_datetime(stock_df["Date"])
    stock_df.set_index("Date", inplace=True)
    # 对齐到统一日期索引,缺失日期填充NaN
    portfolio[ticker] = stock_df["Adjusted_close"].reindex(combined_dates)

补充说明

两种方案的核心都是通过日期索引对齐,让每一列的长度和portfolio的行长度保持一致,从根本上解决长度不匹配的问题。如果不需要保留所有日期,也可以选择用日期交集(把union改成intersection),只保留所有股票都有的日期数据。

内容的提问来源于stack exchange,提问作者Mahmoud Abdel-Rahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:06:16