SQL
INTERSECT:
- 두 개 이상의 SELECT 결과 중에서 공통으로 존재하는 행만 반환하는 집합 연산자
- 즉, 두 쿼리 결과의 교집합을 구할 때 사용
- A 쿼리 결과 ∩ B 쿼리 결과
- 중복 행은 자동으로 제거(DISTINCT)
- 두 SELECT 결과에서 완전히 동일한 행만 반환
- 컬럼 개수와 순서가 완전히 동일해야 사용 가능
- 각 컬럼의 데이터 타입도 호환되어야 함
- ORDER BY는 마지막 SELECT 뒤에서만 사용 가능
SELECT column1, column2
FROM table_a
INTERSECT
SELECT column1, column2
FROM table_b;
Pandas
1. 데이터 탐색 / 요약
.describe():
- 기초 통계량 확인
- 숫자형: count, mean, std, min, 25%, 50%, 75%, max
df.describe()
- include="all" 옵션:
- 모든 열에 대해 요약 통계량 출력
- 출력 항목: 총 개수, 고유값 개수, 최빈값, 최빈값 빈도수
df.describe(include="all")
.value_counts():
- 각 고유값의 빈도수 계산
df["category"].value_counts()
.mode():
- 최빈값 반환
df["category"].mode()
2. 결측치 처리
.isnull() / .isna():
- 데이터가 결측치(NaN, None) 여부 확인 (True / False)
- 반환값, 처리대상, 동작 방식 모두 동일
- .isna(): R 기반
- .isnull(): Numpy 기반
df.isnull()
df.isna()
.isna().sum():
- 열별 결측치 개수 확인
df.isna().sum()
.fillna():
- 결측치 대체
df["score"].fillna(0)
.dropna(subset=[열이름1,열이름2]):
- 결측치 제거
- 특정 열들에 결측치가 있는 행 제거
df.dropna(subset=["col1", "col2"])
3. 정렬 / 필터링
.sort_values(ascending=False):
- 내림차순 데이터 정렬
- ascending =
- True: 오름차순
- False: 내림차순
df.sort_values(by="score", ascending=False)
.sort_values(by=열이름, ascending=오름차순여부):
- 여러 열 기준 정렬
df.sort_values(
by=["col1", "col2"],
ascending=[True, False]
)
- by=[열1,열2], ascending=[True,False]
- 열1은 오름차순
- 열2는 내림차순
.isin():
- 특정 값이 포함된 행 필터링
- 괄호 안에 있는 값이 포함되면 True, 아니면 False 반환
df[df["grade"].isin(["A", "B"])]
4. 데이터 타입 변환
.astype("string"):
- 문자열 타입으로 변환
- .astype("str")과 동일
df["name"] = df["name"].astype("string")
pd.to_numeric():
- 숫자 타입으로 변환
pd.to_numeric(df["price"], errors="coerce")
- errors="coerce" 옵션: 변환 불가능한 값을 빈 값(NaT) 처리
pd.to_datetime():
- 날짜 타입으로 변환
pd.to_datetime(df["date"], errors="coerce", format="mixed")
- errors="coerce" 옵션: 변환 불가능한 값을 빈 값(NaT) 처리
- format="mixed" 옵션: 여러 형식의 날짜 문자열을 자동으로 인식하여 변환
5. 문자열 처리 (.str)
.str.replace():
- 문자열 치환
df["text"].str.replace(",", "", regex=False)
- regex=False 옵션: 정규표현식이 아닌 일반 문자열로 인식
.str.title():
- 각 단어의 첫 글자만 대문자로 변환
df["name"].str.title()
.str.strip():
- 문자열 양쪽 공백 제거
df["name"].str.strip()
.str.lower():
문자열을 소문자로 변환
df["name"].str.lower()
6. 그룹화 / 집계
.groupby():
- 그룹화 후 집계
df.groupby("category")["price"].mean()
7. 시각화 (Seaborn / Pandas)
.countplot():
- 범주형 데이터 막대 그래프 그리기
sns.countplot(data=df, x="category")
.histplot():
- 히스토그램 그리기
- 분포 확인
sns.histplot(df["score"])
.barplot():
- 막대 그래프와 평균값 그리기
sns.barplot(data=df, x="category", y="score")
- 오차선(error bar): 신뢰구간 의미
.plot(kind="bar"):
- 막대 그래프 그리기
- Pandas 기본 막대 그래프
df["category"].value_counts().plot(kind="bar")
8. 데이터 가공
pd.cut(값, bins=구간, labels=이름):
- 연속형 데이터를 구간으로 나누기
pd.cut(
df["score"],
bins=[0, 60, 80, 100],
labels=["낮음", "보통", "높음"]
)
- bins: 각 구간의 시작과 끝
- labels: 각 구간에 부여할 이름(구간 개수와 이름 개수 일치해야 한다.)
pd.get_dumies():
- 원-핫 인코딩
- 하나의 값을 여러 개의 0과 1로 바꾸는 방법
pd.get_dummies(df["gender"])
9. 행 / 열 조작
.drop():
- 열 또는 행 제거
df.drop(columns=["col1"])
df.drop(index=0)
.rename(columns={기존이름:새이름}):
- 열 이름 변경
df.rename(columns={"old": "new"})
.duplicated():
- 중복된 행 여부 확인
df.duplicated()
- 중복되면 True, 아니면 False
.drop_duplicated(keep="first"):
- 중복된 행 중 첫 번째 행만 남기고 제거
df.drop_duplicates(keep="first")
.copy():
- 원본 데이터프레임과 독립적인 복사본 생성
df_copy = df.copy()
10. 인덱싱
.loc():
- 인덱스 라벨 기반
df.loc[0:3, "name"]
- 끝 포함
.iloc():
- 인덱스 위치 기반
df.iloc[0:3, 0]
- 끝 미포함
11. 파일 저장
.to_csv():
- csv 파일로 저장
df.to_csv(
"data.csv",
index=False,
encoding="utf-8-sig"
)
- index=False 옵션: 인덱스 열 제외
- encoding="utf-8-sig" 옵션: 한글 깨짐 방지
.to_json():
- json 파일로 저장
df.to_json(
"data.json",
orient="records",
force_ascii=False,
indent=2
)
- orient="records" 옵션: 레코드 지향 형식으로 저장
- force_ascii=False 옵션: 한글 깨짐 방지
- indent=2: 들여쓰기 2칸 설정
오늘 한 일
- SQL, Python 코드카타
- 전처리 세션 코드 복습
- 전처리 세션 녹강 수강
오늘의 회고:
이번주 금요일에 시험이 있다는 것을 알게 되었다. 뭔가 SQL때처럼 해냈다는 느낌이 오지 않은 상태에서 나아가는 느낌이다. 보고 또 봐도 문제만 보면 머리가 새하얘진다. 이해도 문제인가.. 싶다. 내일은 전처리 녹화강의를 보고, 파이썬 세션 연습문제를 풀어볼 것이다.
'내일배움캠프' 카테고리의 다른 글
| [내일배움캠프] TIL 21일차 26.01.21(수) (0) | 2026.01.21 |
|---|---|
| [내일배움캠프] TIL 20일차 26.01.20(화) (0) | 2026.01.20 |
| [내일배움캠프] TIL 18일차 26.01.16(금) (1) | 2026.01.16 |
| [내일배움캠프] TIL 17일차 26.01.15(목) (1) | 2026.01.15 |
| [내일배움캠프] TIL 16일차 26.01.14(수) (0) | 2026.01.14 |