2017-09-11 11 views
1

私はDataframeをPythonで使用しており、複数の列の値に基づいて行のインデックスを選択しようとしています。以下は私のデータフレームの100行目の値は次のとおりです。列の値で行インデックスを選択する方法

>>> df.loc[100] 
id          100 
iid  9cdb7709-38f8-442a-812a-986b5b148161 
lat         -37.8294 
lon         144.979 
name      Doryanthes excelsa 
Name: 100, dtype: object 

私はそのid 100とlatある行を選択したいコマンド下記により-37.8294です:

>>> df[(df['id'] == 100) & (df['lat'] == -37.8294)].index 
Int64Index([], dtype='int64') 

上記のコマンドは、空のインデックスを返します。 。 df.loc[100]コマンドで値を取得できるのは分かりませんが、上記のコマンドから行インデックスを取得できないのはなぜですか?

+1

は、すべてのdtypesです一貫性? '' lat''は文字列やそれ以外のものではありませんか?あなたの出力は、私がそれらの条件に一致するものを見つけることができないと思うようになり、dtypeの不一致がそのために一般的な方法です。 – Stael

+0

'print df ['lat'] dtype'はiircをチェックします。 – Stael

答えて

5

のでnumpy.iscloseを必要とするあなたはfloatを選択したいのですが、精度の問題があるので、一致を取得していないと、空のデータフレームに

を返す:

df1 = df[(df['id'] == 100) & (np.isclose(df['lat'],-37.8294))] 

はサンプル:

df = pd.DataFrame({'id':[100,200], 
        'lat':[-37.82940007,-37.82]}) 
print (df) 
    id  lat 
0 100 -37.8294 
1 200 -37.8200 

df1 = df[(df['id'] == 100) & (df['lat'] == -37.8294)] 
print (df1) 
Empty DataFrame 
Columns: [id, lat] 
Index: [] 

df1 = df[(df['id'] == 100) & (np.isclose(df['lat'],-37.8294))] 
print (df1) 
    id  lat 
0 100 -37.8294 
+0

@Stael - ありがとう – jezrael

+1

これは良い叫びです - 私はこれを考えなかったでしょうが、この例では実際問題ですか?デフォルトの表示オプションでは、パンダは6dpに浮動小数点を表示するように見えるので、これは精密なものではないようです。私は彼が偶然にそこにいくつかの弦を持っていると思った。 – Stael

+0

はい、これが私の問題を解決しました。それは精密な問題です。私は5分で答えを受け入れます。ありがとう。 –

関連する問題