鱼C论坛

 找回密码
 立即注册
查看: 3560|回复: 1

KeyError: "['Q19286'] not found in axis"

[复制链接]
发表于 2019-11-20 13:08:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Dawnstar 于 2019-11-20 15:19 编辑
  1. import pandas as pd

  2. path = 'G:\\deleted entries\\test\\'

  3. df1 = pd.read_table(path + 'phosphorylation-len20.txt')
  4. df1_col = list(df1)#获取DataFrame列标签
  5. df1_col.insert(0,df1_col.pop(df1_col.index("Uniprot Entry")))#改变列标签为指定顺序
  6. df1.index = df1['Uniprot Entry']
  7. print(df1.index)#将这一列设置为索引
  8. print(df1)
  9. df2 = pd.read_table(path + 'deleted.txt')
  10. print(df2.columns)
  11. x = ''
  12. for x in df1.index.tolist(): #筛选两列重复值
  13.     if x in df2["Uniprot Entry"].tolist():
  14.         df1 = df1.drop(x)  
复制代码
#根据索引删除行的方式,删除这些重复的行

df2的'Uniprot Entry'列与df1的'Uniprot Entry'列存在重复值。

目的:筛选这两列的重复值,删除其在df1中所在行。

但运行以上代码会出现报错:
Traceback (most recent call last):

  File "<ipython-input-25-58024f1969bb>", line 1, in <module>
    runfile('G:/Posttranslational modification/uniprot deleted entries/test/test.py')

  File "d:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
    execfile(filename, namespace)

  File "d:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "G:/Posttranslational modification/uniprot deleted entries/test/test.py", line 30, in <module>
    df1 = df1.drop(x)

  File "d:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py", line 4102, in drop
    errors=errors,

  File "d:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py", line 3914, in drop
    obj = obj._drop_axis(labels, axis, level=level, errors=errors)

  File "d:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py", line 3965, in _drop_axis
    raise KeyError("{} not found in axis".format(labels))

KeyError: "['Q19286'] not found in axis"


找不到原因在哪儿,希望有了解的各路大神帮忙指点一二。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-20 15:22:56 | 显示全部楼层
问题出在
  1. for x in df1.index.tolist(): #筛选两列重复值
  2.     if x in df2["Uniprot Entry"].tolist():
复制代码

因为筛选重复值时,重复值出现的次数不是唯一的,要将筛选的重复值中的重复项只保留唯一值就可以了,将代码变为:
  1. a = [x for x in df1.index.tolist() if x in df2["Uniprot Entry"].tolist()]
  2. b = {}.fromkeys(a).keys() #删除列表中重复数据
  3. for i in b:
  4.     df1 = df1.drop(i)      
复制代码


结果就正确了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-20 22:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表