2017-01-12 4 views
0

以下の関数をデータフレームに適用し、修飾する行のみを返しますが、KeyErrorを取得しようとしています。私は間違って何をしていますか?関数dfを実行しているときのKeyError

N = 100 

np.random.seed(0) 

df = pd.DataFrame(
    {'X':np.random.uniform(-3,10,N), 
    'Y':np.random.uniform(-3,10,N), 
    'Z':np.random.uniform(-3,10,N), 
    }) 

def func_sec(df): 
    for i in range(len(df)): 
     for k in range(i+1, len(df)+1): 
      df_sum = df[i:k].sum() 
      m = (df_sum>2).all() & (df_sum.sum()>10) 
      return df[m] 

func_sec(df) 
+0

'm =(df_sum> 2).all()&(df_sum.sum()> 10)'とは何ですか? – doctorlove

+1

ここで 'm'はブール値で、' df'はキーとして 'X'、' Y'、 'Z'というブール値を持ちません。 – IanS

+0

私は、データフレームに適格な行だけを返したいと思います。私は一度に複数のdfを実行できるようにするためにforループを置くことを試みました。しかし、それを動作させることはできません – Zanshin

答えて

1

データフレームの場合、dfなどの列で選択できます。あなたのケースでは「X」:

df['X'] 

またはスライス一部の行あなたがdf[0]など、無効な何かをしようとした場合

df[0:10] 

df[True]キーエラーになります。

0

他の人が指摘したように、キーエラーはdf [m]のために取り除かれます。カラム名はブール値ではなく、 'X'、 'Y'、 'Z'です。 the pandas documentationの下のどこかに、ブールインデックスについての情報があるので、あなたがチェックアウトすることをお勧めします。

短いストーリーでは、df[True]はできませんが、になります。df[df['X'] > 10]自体です。

関連する問題