반응형
특정 열에 특정 문자열을 포함하는 Pandas 데이터 프레임에서 행을 삭제하는 방법은 무엇입니까?
이 질문에 이미 답변이 있습니다.
파이썬에 매우 큰 데이터 프레임이 있고 특정 열 안에 특정 문자열이있는 모든 행을 삭제하려고합니다.
예를 들어, 데이터 프레임의 C 열에 문자열 "XYZ"가 하위 문자열로있는 모든 행을 삭제하려고합니다.
.drop () 메서드를 사용하여 효율적으로 구현할 수 있습니까?
pandas에는 벡터화 된 문자열 연산이 있으므로 원하지 않는 문자열이 포함 된 행을 필터링 할 수 있습니다.
In [91]: df = pd.DataFrame(dict(A=[5,3,5,6], C=["foo","bar","fooXYZbar", "bat"]))
In [92]: df
Out[92]:
A C
0 5 foo
1 3 bar
2 5 fooXYZbar
3 6 bat
In [93]: df[~df.C.str.contains("XYZ")]
Out[93]:
A C
0 5 foo
1 3 bar
3 6 bat
문자열 제약이 하나의 문자열이 아닌 경우 다음을 사용하여 해당 행을 삭제할 수 있습니다.
df = df[~df['your column'].isin(['list of strings'])]
위의 내용은 목록의 요소를 포함하는 모든 행을 삭제합니다.
정확한 문자열을 비교하려는 경우에만 작동합니다. 열 문자열에 목록의 문자열이 포함되어 있는지 확인하려는 경우에는 작동하지 않습니다.
목록과 비교하는 올바른 방법은 다음과 같습니다.
searchfor = ['john', 'doe']
df = df[~df.col.str.contains('|'.join(searchfor))]
new_df = df[df.C != 'XYZ']
참조 : https://chrisalbon.com/python/data_wrangling/pandas_dropping_column_and_rows/
코드를 약간 수정했습니다. 갖는 = 거짓이 노나 빈 값을 건너 뜁니다. 그렇지 않으면 TypeError : bad operand type for unary ~ : float 오류가 발생할 수 있습니다 .
df[~df.C.str.contains("XYZ", na=False)]
소스 : TypeError : 단항 ~ : float에 대한 잘못된 피연산자 유형
아래 코드는 모든 행의 목록을 제공합니다.
df[df['C'] != 'XYZ']
위 코드의 값을 데이터 프레임에 저장하려면 :-
newdf = df[df['C'] != 'XYZ']
모든 NaN을 삭제하지 않으려면
df[~df.C.str.contains("XYZ") == True]
반응형
'Program Tip' 카테고리의 다른 글
grunt를 설치하는 방법 및 스크립트를 작성하는 방법 (0) | 2020.10.15 |
---|---|
이 부울 "(number & 1) == 0"은 무엇을 의미합니까? (0) | 2020.10.15 |
Xcode 7 오류 ITMS-90474 : "잘못된 번들", Apple에 제출할 수 없음 (0) | 2020.10.15 |
빈혈 도메인 모델 : 장점 / 단점 (0) | 2020.10.15 |
UIView의 모든 하위보기, 하위보기 및 하위보기를 어떻게 반복 할 수 있습니까? (0) | 2020.10.15 |