2017-11-14 14 views
-1

私は、特定の列の空白で行を削除し、その列でフィルタしたい後に提供Unalignableブールシリーズのキー:IndexingError:dropnaとフィルタリング

私はこのようにそれを行う場合:

df['location'].dropna(inplace=True) 
dfloc = df[df['location'] == myvar] 

その後、私はこのエラーを取得する:

IndexingError: Unalignable boolean Series key provided 

だから私は、エラーを回避するために、代わりにこのようdropna使用する必要があります。

df.dropna(subset = ['location'],inplace=True) 
dfloc = df[df['location'] == myvar] 

2番目の方法ではエラーが発生する理由は誰にも分かりますか?ここで

は私のデータフレームのサンプルです:

 uid    date   location 
1 1114-104119  2017-11-14 10:41:19  Chicago 
2 1114-104056  2017-11-14 10:40:56  NaN 
3 1114-104055  2017-11-14 10:40:55  LA 
4 1114-103223  2017-11-14 10:32:23  NaN 
5 1114-103050  2017-11-14 10:30:50  NYC 
+0

テストするデータがありますか? –

+0

申し訳ありませんが、私はそれを共有することはできません。 – sparrow

+0

誰かが優勝者を説明するのに十分親切であれば、私は本当にそれを感謝するでしょう。私は間違いなく、将来的に他の人を助けるかもしれない興味深い質問だと思っているようです。 – sparrow

答えて

1

何が起こっているかを第1の方法は、あなたがコピーまたは元のデータフレームのスライスを作成し、そのシリーズから行を落としているということです、あなたはありません元のデータフレームに実際に影響を与えます。現在、元のデータフレームをスライスするためにそのマングル付きシリーズを使用しようとすると、シリーズのインデックスは元のデータフレームのインデックスと一致しません。したがって、エラー

IndexingError: Unalignable boolean Series key provided

これは証明です。

df = pd.DataFrame({'Location':[1,np.nan,3,np.nan],'A':np.random.randint(0,10,4)}) 
df 
    A Location 
0 7  1.0 
1 6  NaN 
2 1  3.0 
3 8  NaN 

df['Location'].dropna(inplace=True) 
print(df['Location']) 
0 1.0 
2 3.0 
Name: Location, dtype: float64 

しかし、dfをもう一度印刷すると完全なデータフレームが得られますが、このデータフレームは変更されていません。

print(df) 

    A Location 
0 7  1.0 
1 6  NaN 
2 1  3.0 
3 8  NaN 

2番目の方法では、サブセットの選択に基づいてオーリンデータフレームのドロップを実行しています。したがって、そのメソッドは機能し、そのシリーズを使用してデータフレームのブール型インデックスを作成できます。

関連する問題