2017-06-04 3 views
2

特定のセルの値を取得しようとしています。パンダのDataFrame:リストにないラベルとKeyError

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

私は既にmain_idは知っているが、他には何も分かっていないので、code = 94というセルが必要です。

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']) 

プリント(df.loc [ 'name' は])ラベルは== STRインデックス

及びv = df.loc [STR(DF [ 'main_id'])にないと主張します。(2456)] [ 'コード']の値は言う 'KeyError例外偽'

答えて

3

df.loc['name']nameインデックスではないのでKeyErrorを送出します。 にあります。 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 

は、返却オブジェクトは常に1つの値のみを持っている場合でもシリーズになります。だから、そこから最初の値を基になる配列にアクセスして選択することをお勧めします:

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

あなたの助けみんなのおかげで、非常に役立ちます。 –

1

代替ソリューション:

In [76]: df.set_index('main_id').at['2456','code'] 
Out[76]: 94 
関連する問題