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

删除DataFrame中不在另一DataFrame的行时遇‘not found in axis’错误求助

问题解决:删除DataFrame中不在另一个DataFrame索引里的行

错误原因分析

  • 参数顺序搞反:np.setdiff1d的第一个参数应该是大DF的索引,第二个是小DF的索引,你写反了顺序。
  • 错误取数:你用了df_rnaseq_dropped.values,这是获取整个DataFrame的所有数值(二维数组),而不是索引,导致生成的uncommon_indices根本不是大DF的索引值,所以执行drop时找不到对应行,触发not found in axis错误。
  • 无效赋值:inplace=True时,drop不会返回新对象,wanted会变成None,这是没必要的赋值操作。

正确解决方法

方法1:用loc直接筛选(最简洁高效)

直接保留大DF中索引存在于小DF索引中的行:

# 筛选大DF中索引在小DF索引里的行
df_rnaseq_dropped = df_rnaseq_dropped.loc[df_patient_info_train.index]

如果担心小DF的索引里有大DF不存在的项,可以先取交集避免报错:

# 先取两个索引的交集,再筛选
common_index = df_rnaseq_dropped.index.intersection(df_patient_info_train.index)
df_rnaseq_dropped = df_rnaseq_dropped.loc[common_index]

方法2:修正你原来的numpy思路

先正确找出大DF中不在小DF里的索引,再删除:

import numpy as np

# 找出大DF索引中不在小DF索引里的元素
uncommon_indices = np.setdiff1d(df_rnaseq_dropped.index, df_patient_info_train.index)
# 删除这些行(二选一:原地修改或赋值新对象)
df_rnaseq_dropped.drop(uncommon_indices, axis=0, inplace=True)
# 或者:
# df_rnaseq_dropped = df_rnaseq_dropped.drop(uncommon_indices, axis=0)

方法3:用pandas的index.difference直接获取待删除索引

# 获取大DF中不在小DF里的索引
to_drop = df_rnaseq_dropped.index.difference(df_patient_info_train.index)
# 删除行
df_rnaseq_dropped = df_rnaseq_dropped.drop(to_drop)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:01:18