반응형
Panda 데이터 프레임에서 문자열 패턴이 포함된 행을 필터링하는 방법
Python Panda의 데이터 프레임은 다음과 같습니다.
df = pd.DataFrame({'vals': [1, 2, 3, 4], 'ids': [u'aball', u'bball', u'cnut', u'fball']})
또는 표 형식으로:
ids vals
aball 1
bball 2
cnut 3
fball 4
키워드 "볼"이 포함된 행을 필터링하려면 어떻게 해야 합니까?예를 들어, 출력은 다음과 같습니다.
ids vals
aball 1
bball 2
fball 4
In [3]: df[df['ids'].str.contains("ball")]
Out[3]:
ids vals
0 aball 1
1 bball 2
3 fball 4
df[df['ids'].str.contains('ball', na = False)] # valid for (at least) pandas version 0.17.1
단계별 설명(내부에서 외부로):
df['ids']
를 선택합니다.ids
데이터 프레임의 열(기술적으로는 객체)df['ids']
종류pandas.Series
)df['ids'].str
벡터화된 문자열 메서드를 적용할 수 있습니다(예:lower
,contains
)를 시리즈로df['ids'].str.contains('ball')
는 시리즈의 각 요소를 체크하여 요소 값에 '볼' 문자열이 하위 문자열로 포함되어 있는지 여부를 확인합니다.그 결과는 일련의 부울란으로 인해True
또는False
'볼' 서브스트링의 존재에 대해서요df[df['ids'].str.contains('ball')]
는 부울 '마스크'를 데이터 프레임에 적용하고 적절한 레코드를 포함하는 뷰를 반환합니다.na = False
는 NA/NaN 값을 대상에서 삭제합니다.그렇지 않으면 ValueError가 반환될 수 있습니다.
>>> mask = df['ids'].str.contains('ball')
>>> mask
0 True
1 True
2 False
3 True
Name: ids, dtype: bool
>>> df[mask]
ids vals
0 aball 1
1 bball 2
3 fball 4
필터링할 열을 새 인덱스로 설정할 경우 를 사용하는 것도 고려할 수 있습니다.다른 열로 유지할 경우,str.contains
가는 길이에요.
예를 들어 다음과 같이 합시다.
df = pd.DataFrame({'vals': [1, 2, 3, 4, 5], 'ids': [u'aball', u'bball', u'cnut', u'fball', 'ballxyz']})
ids vals
0 aball 1
1 bball 2
2 cnut 3
3 fball 4
4 ballxyz 5
모든 행을 필터링할 계획입니다.ids
포함하다ball
AND 세트ids
새로운 인덱스로서
df.set_index('ids').filter(like='ball', axis=0)
그러면
vals
ids
aball 1
bball 2
fball 4
ballxyz 5
그렇지만filter
또한 정규식을 전달할 수 있으므로 열 엔트리가 로 끝나는 행만 필터링할 수 있습니다.ball
이 경우,
df.set_index('ids').filter(regex='ball$', axis=0)
vals
ids
aball 1
bball 2
fball 4
이제 다음 엔트리가 있는 것에 주의해 주세요.ballxyz
로 시작하는 것은 포함되어 있지 않습니다.ball
그것으로 끝나지 않습니다.
로 시작하는 모든 엔트리를 가져오려면ball
간단하게 사용할 수 있습니다.
df.set_index('ids').filter(regex='^ball', axis=0)
굴곡성
vals
ids
ballxyz 5
컬럼에서도 동일하게 동작합니다.변경할 필요가 있는 것은,axis=0
열을 기준으로 필터링을 하면axis=1
.
언급URL : https://stackoverflow.com/questions/27975069/how-to-filter-rows-containing-a-string-pattern-from-a-pandas-dataframe
반응형
'source' 카테고리의 다른 글
릴레이셔널 데이터베이스를 수평으로 확장할 수 있다 (0) | 2022.09.22 |
---|---|
Ajax 포스트에서 파일 다운로드 처리 (0) | 2022.09.22 |
각도: *ngClass의 조건부 클래스 (0) | 2022.09.22 |
주석 @Id 및 @GeneratedValue(전략 = GenerationType)의 용도는 무엇입니까?아이덴티티)왜 세대형은 아이덴티티인가? (0) | 2022.09.21 |
두 표의 세 번째 표의 카운트 함수를 사용하여 마리아에서 문을 선택합니다.DB (0) | 2022.09.21 |