2016-07-08 9 views
1

位置によって行にアクセスするときにPandasにデフォルト値を取得する方法はありますか?私は.get()関数を認識していますが、これはインデックスで検索するときに機能します。Pandasシリーズのデフォルト値のget()を使用して位置

以下は私がしたいことです。データフレーム:

In [24]: df 
Out[24]: 
    col1 
idx 
20  A 
21  B 
22  C 
23  D 
24  E 

は、インデックスによる検索とデフォルト値を取得するには、正常に動作します:

In [25]: df['col1'].get(23, 'the_default_value') 
Out[25]: 'D' 

In [26]: df['col1'].get(28, 'the_default_value') 
Out[26]: 'the_default_value' 

しかし、位置によって検索する同等の方法があるように表示されません。 .iloc()を使用できますが、その行が存在しない場合はデフォルト値を取得するのに役立ちません。例えば。

In [57]: df['col1'].iloc[2] 
Out[57]: 'C' 

In [58]: df['col1'].iloc[6] 
... 
IndexError: single positional indexer is out-of-bounds 

私はtry...exceptを使用してそれを設定、または値が存在するかどうか、それを行うためのクリーンな方法がある場合.iget()のように、事前に確認することができます(.iloc.locなど)?このような

+0

「0」から始まるようにインデックスをリセットするだけです。 – EdChum

+0

はい、可能です。しかし、実際のインデックスが必要な場合は、単にインデックスをリセットすることを意味します(用途の1つがループ内にあります)。 – vk1011

答えて

0

しまう何かがクリーナーとみなされる:

df['new_index'] = np.arange(df.shape[0]) 
df = df.set_index('new_index') 

df['col1'].get(2, 'the_default_value') 

元のインデックスが必要な場合は、それがマルチインデックス

df['new_index'] = np.arange(df.shape[0]) 
df = df.set_index('new_index', append=True) 

df['col1'].get((pd.IndexSlice[:], 2), 'the_default_value') 
+1

ありがとうございますが、読みやすさがより複雑になってきているようです。あなたの最初の解決策では、元のインデックスを取り除く必要があります。この場合、 'df.reset_index()'を実行する方が簡単です。しかし、私はインデックスを変更しないようにしています。 – vk1011

0

[OK]を使用することが有用である、私は別の答えを得ました:

n = 2 
df['col1'].get(df.index[n] if n < df.shape[0] else None, 'hi') 

ので、使用は...インデックスに位置値を取得

関連する問題