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

如何基于ticker和date键合并两个Pandas DataFrame,解决拼接报错和空值问题

Pandas 双关联键全量合并实现方案

问题根因说明

  • pd.concat(axis=1) 是按行索引对齐拼接,不会主动匹配ticker和date字段,只要两个表行数一致就会硬拼,导致最终结果出现两个ticker列和两个date列,你用var['ticker']取到的是二维DataFrame,传入.loc判断自然会报多维键错误。
  • 直接用merge出现大量空值,大概率是两个原因:一是默认用了how='inner'内连接,仅保留两边都匹配的记录;二是两个表的ticker、date字段格式不一致(比如一个是日期类型一个是字符串,ticker带多余空格等)导致关联不上。

实现步骤

1. 先统一关联键格式(避免隐性不匹配)

import pandas as pd

# 统一两个表的date字段为datetime类型,消除字符串格式差异
financials_Balance_Sheet_yearly['date'] = pd.to_datetime(financials_Balance_Sheet_yearly['date'])
financials_Income_Statement_yearly['date'] = pd.to_datetime(financials_Income_Statement_yearly['date'])

# 统一ticker字段,去除首尾空格,避免隐性不匹配
financials_Balance_Sheet_yearly['ticker'] = financials_Balance_Sheet_yearly['ticker'].str.strip()
financials_Income_Statement_yearly['ticker'] = financials_Income_Statement_yearly['ticker'].str.strip()

2. 用外连接实现全量保留合并

指定ticker和date为关联键,用how='outer'外连接保留两边所有记录,匹配不到的字段自动填充NaN,方便后续校验清洗:

merged_df = pd.merge(
    left=financials_Balance_Sheet_yearly,
    right=financials_Income_Statement_yearly,
    on=['ticker', 'date'],
    how='outer',
    suffixes=('_balance', '_income') # 非关联重名字段自动加后缀区分,避免覆盖
)

3. 筛选AAPL.US记录

aapl_data = merged_df.loc[merged_df['ticker'] == 'AAPL.US']

可选:不匹配记录校验

如果需要单独排查两边匹配不上的记录,可以用以下代码筛选:

# 仅在资产负债表中存在的记录
balance_only = merged_df[merged_df.filter(regex='_income$').isna().all(axis=1)]
# 仅在利润表中存在的记录
income_only = merged_df[merged_df.filter(regex='_balance$').isna().all(axis=1)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:54:04