Dan*_*y W 6 python dataframe pandas
我试图获得特定细胞的价值.
main_id name code
0 1345 Jones 32
1 1543 Jack 62
2 9874 Buck 86
3 2456 Slim 94
Run Code Online (Sandbox Code Playgroud)
我想要代码= 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'])
Run Code Online (Sandbox Code Playgroud)
该print(df.loc['name'])索赔标签不在索引中
并v=df.loc[str(df['main_id']) == str(2456)]['code'].values说'KeyError False'
df.loc['name']引发KeyError,因为name它不在索引中 ; 它在列中.使用时loc,第一个参数是index.你可以使用df['name']或df.loc[:, 'name'].
您还可以将布尔数组传递给loc(索引和列).例如,
df.loc[df['main_id']=='2456']
Out:
main_id name code
3 2456 Slim 94
Run Code Online (Sandbox Code Playgroud)
您仍然可以为此选择特定列:
df.loc[df['main_id']=='2456', 'code']
Out:
3 94
Name: code, dtype: int64
Run Code Online (Sandbox Code Playgroud)
使用布尔索引,即使您只有一个值,返回的对象也将始终为Series.所以你可能想要访问底层数组并从那里选择第一个值:
df.loc[df['main_id']=='2456', 'code'].values[0]
Out:
94
Run Code Online (Sandbox Code Playgroud)
但更好的方法是使用该item方法:
df.loc[df['main_id']=='2456', 'code'].item()
Out:
94
Run Code Online (Sandbox Code Playgroud)
这样,如果返回的Series的长度大于1而您values[0]没有检查,则会出现错误.