[python] “not in”조건에 따라 데이터 프레임에서 행 삭제 [중복]

날짜 열의 값이 날짜 목록에있을 때 팬더 데이터 프레임에서 행을 삭제하고 싶습니다. 다음 코드는 작동하지 않습니다.

a=['2015-01-01' , '2015-02-01']

df=df[df.datecolumn not in a]

다음과 같은 오류가 발생합니다.

ValueError : Series의 진실 값이 모호합니다. 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()사용할 수 있지만 결과를 단일 부울 값으로 줄이려는 경우에만 유용합니다. 그러나 이것은 외부 목록에 대해 Series의 모든 값의 멤버 자격을 테스트하고 결과를 그대로 유지하는 것입니다 (즉, 원래 DataFrame을 슬라이스하는 데 사용되는 Boolean Series). ).

이에 대한 자세한 내용은 Gotchas 에서 읽을 수 있습니다 .


답변