标签不在List和KeyError中

时间:2017-06-04 08:45:28

标签: python pandas dataframe

我试图获取特定细胞的价值。

  main_id   name  code
  0    1345  Jones    32
  1    1543   Jack    62
  2    9874   Buck    86
  3    2456   Slim    94

我想要代码为94的单元格,因为我已经知道了main_id,但没有别的。

raw_data = {'main_id': ['1345', '1543', '9874', '2456'],
        'name': ['Jones', 'Jack', 'Buck', 'Slim'],
        'code': [32, 62, 86, 94]}

    df=pd.DataFrame(raw_data, columns = ['main_id', 'name', 'code'])


    v=df.loc[str(df['main_id']) == str(2456)]['code'].values
    print(df.loc['name'])

print(df.loc['name'])声明标签不在索引

v=df.loc[str(df['main_id']) == str(2456)]['code'].values表示' KeyError False'

2 个答案:

答案 0 :(得分:6)

df.loc['name']引发KeyError,因为name不在索引中;它位于中。使用loc时,第一个参数用于索引。您可以使用df['name']df.loc[:, 'name']

您还可以将布尔数组传递给loc(索引和列都有)。例如,

df.loc[df['main_id']=='2456']
Out:
   main_id  name    code
3  2456     Slim    94

您仍然可以为此选择特定列:

df.loc[df['main_id']=='2456', 'code']
Out:
3    94
Name: code, dtype: int64

使用布尔索引,即使您只有一个值,返回的对象也将始终为Series。所以你可能想要访问底层数组并从那里选择第一个值:

df.loc[df['main_id']=='2456', 'code'].values[0]
Out:
94

但更好的方法是使用item方法:

df.loc[df['main_id']=='2456', 'code'].item()
Out:
94

这样,如果返回的Series的长度大于1,而values[0]没有检查,那么您将收到错误。

答案 1 :(得分:1)

替代解决方案:

In [76]: df.set_index('main_id').at['2456','code']
Out[76]: 94