1. ホーム
  2. python

[解決済み] Boolean シリーズのキーは、DataFrame のインデックスと一致するように再インデックス化されます。

2022-01-29 08:14:14

質問事項

以下は、私がエラーに遭遇したときの様子です。

df.loc[a_list][df.a_col.isnull()]

のタイプは a_listInt64Index これは,行番号のリストを含んでいます.これらの行インデックスが属するのは df .

df.a_col.isnull() の部分は、フィルタリングのために必要な条件です。

以下のコマンドを個別に実行しても、警告は出ません。

df.loc[a_list]
df[df.a_col.isnull()]

しかし、それらを並べると df.loc[a_list][df.a_col.isnull()] という警告メッセージが表示されます(ただし結果は表示されます)。

Boolean SeriesのキーはDataFrameのインデックスと一致するように再インデックス化されます。

このエラーメッセージの意味は何ですか?返される結果に影響するのでしょうか?

解決方法は?

警告が出てもあなたのやり方は通用しますが、暗黙的で不明確な動作に依存しないのが一番です。

解決策1 のインデックスを選択するようにします。 a_list をブーリアンマスクとする。

df[df.index.isin(a_list) & df.a_col.isnull()]

解決策2 は、2つのステップで行ってください。

df2 = df.loc[a_list]
df2[df2.a_col.isnull()]

解決策3 一行で済ませたい場合は、以下のようなトリックを使用します。 ここで :

df.loc[a_list].query('a_col != a_col')


この警告は、ブール型ベクトルである df.a_col.isnull() の長さは df 一方 df.loc[a_list] の長さである。 a_list つまり、より短い。したがって df.a_col.isnull() にはありません。 df.loc[a_list] .

pandasが行うのは、呼び出したデータフレームのインデックスを元にboolean系列のインデックスを付け直すことです。事実上、それは df.a_col.isnull() のインデックスに対応する値は a_list . これは動作しますが、動作は暗黙的であり、将来簡単に変更される可能性があるため、このような警告が出ているのです。