データフレームのサブセットのサブセットを選択し、一部の列のみを選択し、行をフィルタリングしようとしています。
df.loc[df.a.isin(['Apple', 'Pear', 'Mango']), ['a', 'b', 'f', 'g']]
しかし、私はエラーが発生しています:
Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.
今すぐスライスしてフィルタリングする正しい方法は何ですか?
これはv0.21.1
で導入された変更で、 docs で説明されています-
以前は、1つまたは複数のラベルが欠落していたラベルのリストを使用して選択すると、常に成功し、欠落したラベルに対して
NaN
が返されました。これでFutureWarning
が表示されます。将来、これはKeyError
( GH15747 )を発生させます。この警告は、少なくとも1つのラベルが欠落しているラベルのリストを渡すときに、.loc[]
または[[]]
を使用するDataFrame
またはSeries
でトリガーされます。
例えば、
df
A B C
0 7.0 NaN 8
1 3.0 3.0 5
2 8.0 1.0 7
3 NaN 0.0 3
4 8.0 2.0 7
あなたがやっているように、ある種のスライスを試してください-
df.loc[df.A.gt(6), ['A', 'C']]
A C
0 7.0 8
2 8.0 7
4 8.0 7
問題ない。次に、C
を存在しない列ラベルに置き換えてみてください-
df.loc[df.A.gt(6), ['A', 'D']]
FutureWarning: Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.
A D
0 7.0 NaN
2 8.0 NaN
4 8.0 NaN
したがって、あなたの場合、エラーはloc
に渡す列ラベルが原因です。それらをもう一度見てみましょう。
このエラーは、リストに新しい列が含まれるときに.append
呼び出しでも発生します。これを避けるために
つかいます:
df=df.append(pd.Series({'A':i,'M':j}), ignore_index=True)
の代わりに、
df=df.append([{'A':i,'M':j}], ignore_index=True)
完全なエラーメッセージ:
C:\ ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py:1472:FutureWarning:.likeに.likeまたは欠落しているラベルを渡すと、将来KeyErrorが発生します。reindex( )代替として。