판다스에서 문자열 관련 함수를 사용하거나 전처리를 하기 위해서는 함수 및 명령어 앞에 str
을 붙여주어야 한다.
예제로는 행정표준관리시스템에서 제공하는 전국 법정동명 및 코드 데이터를 사용했다.
import pandas as pd
df = pd.read_csv(my_dir + "법정동코드", sep='\\t', encoding='cp949')
df = df[df['폐지여부']=="존재"]
df.head()
법정동코드 | 법정동명 | 폐지여부 | |
---|---|---|---|
0 | 1100000000 | 서울특별시 | 존재 |
1 | 1111000000 | 서울특별시 종로구 | 존재 |
2 | 1111010100 | 서울특별시 종로구 청운동 | 존재 |
3 | 1111010200 | 서울특별시 종로구 신교동 | 존재 |
4 | 1111010300 | 서울특별시 종로구 궁정동 | 존재 |
.str[]
# 앞 5자리까지만 추출
df['법정동명'].str[:5].head()
0 서울특별시
1 서울특별시
2 서울특별시
3 서울특별시
4 서울특별시
Name: 법정동명, dtype: object
# 마지막 한글자만 추출
df['법정동명'].str[-1].head()
0 시
1 구
2 동
3 동
4 동
Name: 법정동명, dtype: object
.str.split()
# 공백(" ")으로 분리
df['법정동명'].str.split(" ").head()
0 [서울특별시]
1 [서울특별시, 종로구]
2 [서울특별시, 종로구, 청운동]
3 [서울특별시, 종로구, 신교동]
4 [서울특별시, 종로구, 궁정동]
Name: 법정동명, dtype: object
이렇게 분할된 개별 리스트를 바로 데이터 프레임으로 만드려면, expand=True
옵션을 추가한다.
df['법정동명'].str.split(" ", expand=True).head()
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | 서울특별시 | None | None | None | None |
1 | 서울특별시 | 종로구 | None | None | None |
2 | 서울특별시 | 종로구 | 청운동 | None | None |
3 | 서울특별시 | 종로구 | 신교동 | None | None |
4 | 서울특별시 | 종로구 | 궁정동 | None | None |
.str.startswith()
이는 특정 boolean을 반환하는데, 특정 글자로 시작하면 True, 아니면 False 반환
df['법정동명'].str.startswith("서울").head()
0 True
1 True
2 True
3 True
4 True
Name: 법정동명, dtype: bool
# 서울로 시작하는 데이터만 필터링
df[df['법정동명'].str.startswith("서울")].head()
법정동코드 | 법정동명 | 폐지여부 | |
---|---|---|---|
0 | 1100000000 | 서울특별시 | 존재 |
1 | 1111000000 | 서울특별시 종로구 | 존재 |
2 | 1111010100 | 서울특별시 종로구 청운동 | 존재 |
3 | 1111010200 | 서울특별시 종로구 신교동 | 존재 |
4 | 1111010300 | 서울특별시 종로구 궁정동 | 존재 |
.str.endswith()
# 동으로 끝나는 데이터만 필터링
df[df['법정동명'].str.endswith("동")].head()
법정동코드 | 법정동명 | 폐지여부 | |
---|---|---|---|
2 | 1111010100 | 서울특별시 종로구 청운동 | 존재 |
3 | 1111010200 | 서울특별시 종로구 신교동 | 존재 |
4 | 1111010300 | 서울특별시 종로구 궁정동 | 존재 |
5 | 1111010400 | 서울특별시 종로구 효자동 | 존재 |
6 | 1111010500 | 서울특별시 종로구 창성동 | 존재 |