susinlee 님의 블로그
문자열 관련 함수, 최적화 및 안정성 본문
MySQL
소문자, 대문자 변환 및 문자열 슬라이싱
소문자 / 대문자로 바꾸는 함수
LOWER(str)
예) SELECT LOWER('HELLO'); → 'hello'
UPPER(str)
예) SELECT UPPER('hello'); → 'HELLO'
문자열 슬라이싱 (부분 문자열 추출)
SUBSTR(str, pos, len) : pos 위치부터 len 길이만큼 추출
예) SELECT SUBSTR('abcdef', 2, 3) → 'bcd'
- pos는 1부터 시작함
- 음수를 쓰면 뒤에서부터 위치를 계산
문자열 길이를 구하는 함수
CHAR_LENGTH(str)
예) SELECT CHAR_LENGTH('안녕하세요'); → 5
SELECT CHAR_LENGTH('hello'); → 5
바이트 수를 구하는 함수
LENGTH(str)
예) SELECT LENGTH('안녕하세요') → 15
SELECT LENGTH('hello') → 5
Pandas
문자열 관련 함수
소문자/대문자 변환
lower()
upper()
문장의 첫 글자만 대문자, 나머지는 소문자
capitalize()
각 단어의 첫 글자만 대문자로 변환
title()
대소문자를 서로 뒤바꿈
swapcase()
최적화 및 안정화
1. 사이드 이펙트 : 입력값 외의 외부 상태(변수, 객체 등)를 변경하는 것
→ 최대한 피해야 함
- 예측하기 어려운 버그 발생 가능
- 재사용성, 테스트 용이성이 떨어짐
- 함수형 프로그래밍의 핵심 원칙 중 하나는 사이드 이펙트 프리
2. .str 접근 vs apply
.str 접근자
- 문자열을 일괄 처리하는 pandas 전용 기능
- 내부적으로 벡터화 되어 있어 속도가 빠르고 메모리 효율적
apply()
- 각 원소에 대해 파이썬 함수를 일일히 적용
- 일반적인 파이썬 루프 방식으로 속도가 느림
3. df.속성 vs df['속성']
df.속성
- 속기법
- 내부적으로는 __getattr__() 를 호출
- 간단하고 보기좋지만
- 열 이름이 python 키워드 이거나
- 공백이나 특수문자가 있으면 에러
- DataFrame의 속성과 충돌할 수 있음
df['속성']
- 보다 안전하고 일반적인 방식
- 어떤 열 이름이든 문자열로 명시적으로 지정 가능
- 실무에서는 이 방식을 더 권장함
'코드카타 > SQL, Pandas' 카테고리의 다른 글
코호트와 리텐션의 구현 (MySQL, Pandas) (0) | 2025.03.31 |
---|---|
쿼리 작성 가이드 및 최적화 (0) | 2025.03.26 |
SQL로 조합 생성하기 (0) | 2025.03.18 |
퍼널 분석 - SQL 쿼리로 구현하기 (0) | 2025.03.16 |
코호트 분석 - SQL 쿼리로 구현하기 (0) | 2025.03.16 |