我试图获取特定细胞的价值。
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'
答案 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