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

Pandas合并两个DataFrame仅返回单条数据该如何解决?

合并DataFrame仅返回单条数据的诱因与解决方案

问题诱因

  • 合并规则默认值问题:pd.merge()默认采用*内连接(inner join)*逻辑,仅保留两个DataFrame中Ticker列取值完全一致的行,不匹配的行直接被过滤。
  • Ticker列内容存在隐形差异:这是该场景下最核心的诱因,常见差异包括两类:
    • 隐形空白符:从CSV读取的df中Ticker列可能存在前后空格、换行符等不可见字符,比如'AAPL '(末尾带空格)会被判定为与df1中的'AAPL'不同。
    • 大小写不匹配:如果CSV中存储的股票代码为小写('aapl')或首字母大写('Aapl'),会与df1中拉取到的全大写代码匹配失败。
  • 拉取数据异常:若调用si.get_live_price()时AAPL、MSFT的接口请求失败,会导致df1本身就仅存在TSLA一行数据,合并后自然只有一条结果。

解决方法

  • 先验证df1数据完整性:执行print(df1)确认三行股票数据均正常生成,排除接口拉取异常问题。
  • 统一清洗Ticker列消除匹配差异:
    # 去除两表Ticker列的前后空白符,统一转为大写
    df['Ticker'] = df['Ticker'].str.strip().str.upper()
    df1['Ticker'] = df1['Ticker'].str.strip().str.upper()
    
  • 调整合并规则便于排查问题:如果需要保留所有原始记录,可将合并方式改为外连接,快速定位匹配失败的行:
    # 外连接合并,未匹配到的字段会填充为NaN
    combine = pd.merge(df, df1, on='Ticker', how='outer')
    # 筛选存在缺失值的行,即可查看哪些代码匹配失败
    print(combine[combine.isna().any(axis=1)])
    
  • 可选代码规范优化:修正现有字典生成式的变量重名问题(当前不影响运行,但存在隐性风险):
    # 原写法循环变量与外层列表同名,调整为独立变量名
    price_data = {ticker: si.get_live_price(ticker) for ticker in tickers}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:54:06