판다스의 고오급 기능

SMALL

필수로 알아야 할 기능 요약

  1. 데이터 로드 및 저장
    • read_csv(), to_csv(), read_excel(), to_excel() 등.
  2. 데이터 선택
    • loc[], iloc[], 조건에 따른 필터링.
  3. 데이터 정렬
    • sort_values(), sort_index().
  4. 데이터 병합 및 연결
    • merge(), concat().
  5. 그룹화 및 집계
    • groupby(), agg().
  6. 결측치 처리
    • fillna(), dropna().
  7. 피벗 테이블
    • pivot_table().

1. 데이터 정렬 (Sorting)

더보기

(1) 정렬: 행 또는 열 기준

  • sort_values()를 사용해 데이터를 특정 열의 값에 따라 정렬할 수 있어.
import pandas as pd

# 예제 데이터
data = {"Name": ["Alice", "Bob", "Charlie"],
        "Age": [25, 30, 35],
        "Score": [85, 95, 90]}
df = pd.DataFrame(data)

# 'Age'를 기준으로 오름차순 정렬
df_sorted = df.sort_values(by="Age", ascending=True)
print(df_sorted)

# 여러 열 기준 정렬 ('Score' 내림차순 -> 'Age' 오름차순)
df_sorted = df.sort_values(by=["Score", "Age"], ascending=[False, True])
print(df_sorted)

 

(2) 인덱스 기준 정렬

  • sort_index()는 행 또는 열의 인덱스를 기준으로 정렬할 때 사용.
df_sorted_index = df.sort_index(axis=0, ascending=False)  # 행 인덱스 기준 정렬
print(df_sorted_index)

 

2. 데이터 병합 (Merging)

더보기

(1) 데이터 합치기

  • 데이터 병합은 여러 테이블을 합칠 때 자주 사용.
  • merge()는 SQL의 JOIN 연산과 비슷.
# 예제 데이터
df1 = pd.DataFrame({"ID": [1, 2, 3], "Name": ["Alice", "Bob", "Charlie"]})
df2 = pd.DataFrame({"ID": [1, 2, 4], "Score": [85, 95, 80]})

# ID를 기준으로 병합
df_merged = pd.merge(df1, df2, on="ID", how="inner")  # inner join
print(df_merged)

# left join
df_left = pd.merge(df1, df2, on="ID", how="left")
print(df_left)

 

(2) 단순 데이터 연결

  • concat()을 사용해 위아래로 데이터를 연결
df1 = pd.DataFrame({"A": [1, 2], "B": [3, 4]})
df2 = pd.DataFrame({"A": [5, 6], "B": [7, 8]})

df_concat = pd.concat([df1, df2], axis=0)  # 행 기준으로 연결
print(df_concat)

 

3. 데이터 그룹화 및 집계 (Grouping & Aggregation)

더보기

groupby()는 데이터를 특정 기준으로 묶어서 집계하는 데 사용

(1) 그룹화 후 집계

# 예제 데이터
data = {"Category": ["A", "A", "B", "B"],
        "Value": [10, 20, 30, 40]}
df = pd.DataFrame(data)

# Category별 합계
grouped = df.groupby("Category")["Value"].sum()
print(grouped)

# Category별 평균, 최대값 등 다양한 집계
grouped_stats = df.groupby("Category")["Value"].agg(["mean", "max", "sum"])
print(grouped_stats)

 

(2) 여러 열로 그룹화

  • 그룹화 기준을 여러 열로 지정할 수 있음.
data = {"Category": ["A", "A", "B", "B"],
        "SubCategory": ["X", "Y", "X", "Y"],
        "Value": [10, 20, 30, 40]}
df = pd.DataFrame(data)

grouped = df.groupby(["Category", "SubCategory"])["Value"].sum()
print(grouped)

  

4. 피벗 테이블 (Pivot Table)

더보기

엑셀의 피벗 테이블과 비슷한 역할을 하며, 데이터 요약과 분석에 유용

# 예제 데이터
data = {"Category": ["A", "A", "B", "B"],
        "SubCategory": ["X", "Y", "X", "Y"],
        "Value": [10, 20, 30, 40]}
df = pd.DataFrame(data)

# 피벗 테이블 생성
pivot = pd.pivot_table(df, values="Value", index="Category", columns="SubCategory", aggfunc="sum")
print(pivot)

 

5. 결측치 처리 (Handling Missing Data)

더보기

 

  • 결측치(Missing Value)데이터가 비어 있는 상태를 의미.
  • 예를 들어, 설문조사에서 누군가 답변하지 않았거나, 데이터 수집 중 오류로 인해 정보가 누락되었다면 그 자리가 결측치가 된다.

 결측치가 포함된 데이터 예시

이름 나이 키(cm) 몸무게(kg)
 철수 25  175  68 
영희  30  160  NaN
민수  NaN 170  70 

여기서:

  • NaN(Not a Number): 결측치를 나타내는 일반적인 값.
  • 파이썬에서는 판다스와 넘파이에서 결측치를 NaN으로 표현함.

 

(1) 결측치 채우기

df = pd.DataFrame({"A": [1, None, 3], "B": [4, 5, None]})

# 1. 평균값/중앙값으로 채우기(수치형 데이터에서 유용)
df["Age"] = df["Age"].fillna(df["Age"].mean())  # 평균값으로 채우기

# 2. 이전/다음 값으로 채우기(보간법)(시간 시계열 데이터에서 사용)
df["Age"] = df["Age"].fillna(method="ffill")  # 이전 값으로 채우기
df["Age"] = df["Age"].fillna(method="bfill")  # 다음 값으로 채우기

# 3. 고정된 값으로 채우기(특정 값을 지정해서 채움)
df["Age"] = df["Age"].fillna(0)  # 0으로 채우기

 

(2) 결측치 제거

# 결측치가 있는 행 제거
df_dropped = df.dropna()
print(df_dropped)

  

(3) 결측치 처리의 예제

import pandas as pd

# 데이터프레임 생성
data = {
    "Name": ["철수", "영희", "민수"],
    "Age": [25, None, 35],
    "City": ["서울", None, "부산"]
}
df = pd.DataFrame(data)

print("원본 데이터:")
print(df)

# 결측치를 0으로 채우기
df_filled = df.fillna(0)
print("\n결측치를 0으로 채운 데이터:")
print(df_filled)

# 결측치를 '알 수 없음'으로 채우기
df_filled_text = df.fillna("알 수 없음")
print("\n결측치를 '알 수 없음'으로 채운 데이터:")
print(df_filled_text)

# 결측치 제거
df_dropped = df.dropna()
print("\n결측치를 제거한 데이터:")
print(df_dropped)

 

 

 

 

 

 

LIST