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

使用Inner Join查找两个Excel文件共同值时返回空DataFrame问题排查

可能的操作错误分析

一、Inner Join返回空DataFrame的原因

  • 两表Proteins列数据不匹配:
    这是最常见的核心原因,比如存在大小写差异(如"EGFR" vs "egfr")、首尾空格(如" EGFR" vs "EGFR")、不可见字符(如换行符、制表符),或者数据类型不一致(一列是字符串、一列是数值格式),导致没有可匹配的共同值。
  • 合并Protein1和Protein2列的方式错误:
    如果合并时是横向拼接字符串(如df['Proteins'] = df['Protein1'] + df['Protein2']),而非将两列的内容纵向堆叠成一列的行,会导致cols.xlsx里的Proteins列是两个蛋白名的拼接字符串,自然和receptors.xlsx里的单个蛋白名没有交集。正确的合并方式应该是:
    import pandas as pd
    df_ko = pd.read_excel('adipose-knockout.xlsx')
    # 纵向合并两列并去重
    proteins_combined = pd.concat([df_ko['Protein1'], df_ko['Protein2']]).drop_duplicates().reset_index(drop=True)
    # 转为DataFrame保存(避免自动生成索引列)
    pd.DataFrame({'Proteins': proteins_combined}).to_excel('cols.xlsx', index=False)
    
  • 保存/读取cols.xlsx时引入干扰:
    若保存时未指定index=False,会自动把行索引存为Excel的第一列,读取时如果未处理,可能误把索引列当成数据列,导致连接时用错匹配列。

二、删除索引列未成功的原因

  • 混淆了行索引与数据列:
    如果你保存cols.xlsx时默认带行索引(未加index=False),读取后这个索引会变成名为Unnamed: 0的普通列。此时用df.drop(index=True)无效,因为这是删除行索引而非列;正确操作是删除该额外列:
    df_cols = pd.read_excel('cols.xlsx')
    df_cols = df_cols.drop('Unnamed: 0', axis=1)
    
    或者读取时直接跳过索引列:
    df_cols = pd.read_excel('cols.xlsx', index_col=False)
    
  • 删除操作参数错误:
    如果尝试删除行索引但用错方法,比如用df.drop()而非df.reset_index(drop=True),也会导致索引无法移除。reset_index(drop=True)会直接丢弃原行索引,而非将其转为普通列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:55:19