日付列の値が日付のリストにある場合、パンダのデータフレームから行を削除したいと思います。次のコードは機能しません。
a=['2015-01-01' , '2015-02-01']
df=df[df.datecolumn not in a]
次のエラーが発生します。
ValueError:シリーズの真理値があいまいです。a.empty、a.bool()、a.item()、a.any()、またはa.all()を使用します。
日付列の値が日付のリストにある場合、パンダのデータフレームから行を削除したいと思います。次のコードは機能しません。
a=['2015-01-01' , '2015-02-01']
df=df[df.datecolumn not in a]
次のエラーが発生します。
ValueError:シリーズの真理値があいまいです。a.empty、a.bool()、a.item()、a.any()、またはa.all()を使用します。
回答:
を使用できますpandas.Dataframe.isin
。
pandas.Dateframe.isin
各要素がリスト内にあるかどうかに応じてブール値を返しますa
。次に、これをで反転して~
に変換True
しFalse
、その逆も同様です。
import pandas as pd
a = ['2015-01-01' , '2015-02-01']
df = pd.DataFrame(data={'date':['2015-01-01' , '2015-02-01', '2015-03-01' , '2015-04-01', '2015-05-01' , '2015-06-01']})
print(df)
# date
#0 2015-01-01
#1 2015-02-01
#2 2015-03-01
#3 2015-04-01
#4 2015-05-01
#5 2015-06-01
df = df[~df['date'].isin(a)]
print(df)
# date
#2 2015-03-01
#3 2015-04-01
#4 2015-05-01
#5 2015-06-01
あなたが使用することができますSeries.isin
:
df = df[~df.datecolumn.isin(a)]
エラーメッセージは、all()
またはany()
を使用できることを示唆していますが、結果を単一のブール値に減らしたい場合にのみ役立ちます。ただし、これは、シリーズ内のすべての値のメンバーシップを外部リストに対してテストし、結果をそのまま保持することです(つまり、元のDataFrameをスライスするために使用されるブールシリーズ)。 )。
これについて詳しくは、Gotchasをご覧ください。
Series.isin
、ではなく、を意味しDataFrame.isin
ます。df全体ではなく、列を比較しています。