Pandas

Date:     Updated:

카테고리:

태그:

🐼 Pandas

1. pandas란?

  • 데이터 조작, 분석, 전처리, 시각화 등을 편리하게 수행할 수 있도록 도와주는 파이썬 라이브러리
  • pandas를 사용하면 행과 열로 이루어진 데이터 객체를 만들어 다룰 수 있음
  • 또한 안정적으로 대용량의 데이터들을 처리하는데 매우 편리한 라이브러리



2. pandas 자료구조

(1) Series (1차원)

  • 값과 인덱스로 구성이 되어있음
  • 값은 numpy 배열. 인덱스는 지정하지 않으면 자동 부여되는 숫자.
  • 인덱스가 정수일 필요는 없음.
import pandas as pd

# ex1) 인덱스 지정
s = pd.Series([90, 85, 70], index=["철수", "영희", "민수"])
print(s)

####### 결과 #######
# 철수    90
# 영희    85
# 민수    70
# dtype: int64


# ex2) 인덱스 지정 x
data = pd.Series([0.25, 0.5, 0.75, 1.0])
print(data)

####### 결과 #######
# 0    0.25
# 1    0.50
# 2    0.75
# 3    1.00
# dtype: float64



Series 접근 방법

방법 설명 예시 결과
s[0] 위치 기반 접근 s[0] 100
s["영어"] 라벨(이름) 기반 접근 s["영어"] 85
s.loc["수학"] 명시적 라벨 접근 s.loc["수학"] 90
s.iloc[2] 명시적 위치 접근 s.iloc[2] 90



(2) DataFrame (2차원, 행과 열)

  • 엑셀 시트처럼 행과 열로 구성된 표
  • Series가 여러 개 모인 형태
import pandas as pd

# ex1) 
people = {
    'california': 11,
    'texas': 22,
    'new york': 33,
    'florida': 44
}

area = {
    'california': 55,
    'texas': 66,
    'new york': 77,
    'florida': 88
}

area_s = pd.Series(area)
population_s = pd.Series(population)

states = pd.DataFrame({'population': population, 'area': area})
print(states)

####### 결과 #######
#             population   area
# california   11          55
# texas        22          66
# new york     33          77
# florida      44          88


# ex2) 
data = {
    "이름": ["철수", "영희", "민수"],
    "국어": [100, 80, 90],
    "영어": [85, 90, 95]
}
df = pd.DataFrame(data)
print(df)

####### 결과 #######
#    이름   국어  영어
# 0  철수  100  85
# 1  영희   80  90
# 2  민수   90  95



DataFrame 접근 방법

📌 열(Column) 접근
방법 설명 예시 결과
df["이름"] 특정 열 조회 df["이름"] Series 형태로 “철수”, “영희”, “민수”
df.이름 속성처럼 열 접근 (단, 이름에 공백 없을 때만) df.이름 위와 같은 결과
df[["이름", "영어"]] 여러 열 조회 df[["이름", "영어"]] DataFrame 반환


📌 행(Row) 접근
방법 설명 예시 결과
df.iloc[0] 첫 번째 행 (0번 인덱스) df.iloc[0] 철수의 전체 정보 (Series)
df.loc[1] 인덱스 1번 행 df.loc[1] 영희의 정보 (Series)
df.iloc[1:3] 슬라이싱으로 여러 행 df.iloc[1:3] 영희, 민수 (DataFrame)


📌 행 + 열 동시에 접근
방법 설명 예시
df.loc[0, "영어"] 0번 행의 영어 점수 85
df.iloc[2, 1] 2번째 행, 1번째 열 → 국어 점수 90
df.loc[:, "국어"] 모든 행의 국어 점수 Series 반환

(3) pandas 기본 정보 확인하기

  • 구조와 내용이 어떤지 확인하는 메소드들
항목 설명 함수
데이터 모양(크기) 행, 열 df.shape
컬럼 이름 열의 이름들 df.columns
인덱스 행의 번호 또는 라벨 df.index
데이터 타입 각 열이 숫자인지, 문자열인지 df.dtypes
간략한 정보 메모리 사용량, null 등 df.info()
통계 요약 평균, 표준편차, 최대값 등 df.describe()
샘플 데이터 앞/뒤 몇 줄만 확인 df.head(n) # 상위 n행, df.tail(n) # 하위 n행



3. 파일 다루기

(1) CSV 파일 다루기

df = pd.read_csv("datasets/employees.csv") 
print("기본 CSV 읽기:")
print(df.head())  # 상위 5개 행 출력

# 특정 열만 불러오기 + 상위 10개 행만 읽기
df_limited = pd.read_csv("datasets/employees.csv", usecols=['이름', '연봉'], nrows=10)
print("\n선택한 컬럼과 10개 행만:")
print(df_limited)

# 저장: 기존 DataFrame을 CSV 파일로 저장
df.to_csv("datasets/employees_saved.csv", index=False, encoding='utf-8-sig')
# index = False 하면 index를 저장하지 않음



(2) Excel 파일 다루기

# Excel 파일 읽기
try:
    df = pd.read_excel('datasets/employees.xlsx', sheet_name='직원정보')
    print("\nExcel에서 읽은 데이터:")
    print(df.head())
except ImportError:
    print("❗ openpyxl 또는 xlrd 패키지가 설치되어 있어야 합니다.")
    print("pip install openpyxl 로 설치하세요.")

# 새로운 컬럼 추가 (예: 연봉(만원))
df['연봉_만원'] = df['연봉'] // 10000

# 조건 컬럼 추가
df['고연봉자'] = df['연봉'] > 4000

# 수정된 DataFrame 출력
print("✍️ 수정된 DataFrame:")
print(df)

# 수정된 데이터를 새 Excel 파일로 저장
df.to_excel('datasets/employees_updated.xlsx', index=False, sheet_name='업데이트된 직원 정보')



여러 시트로 저장하기 (ExcelWriter)

with pd.ExcelWriter('datasets/employees_multi.xlsx', engine='openpyxl') as writer:
    df.to_excel(writer, sheet_name='직원정보')
    df.describe().to_excel(writer, sheet_name='요약통계')



4. 데이터 조작

조작 예시 반환 타입
단일 컬럼 선택 df['컬럼명'] Series
여러 컬럼 선택 df[['컬럼명1', '컬럼명2']] DataFrame
조건 필터링 df[df['컬럼명'] >= 값] DataFrame
컬럼 추가 df['컬럼명'] = ... DataFrame
정렬 df.sort_values('컬럼명') DataFrame



import pandas as pd

data = {
    '제품명': ['무선 마우스', '게이밍 키보드', 'USB-C 허브', '웹캠', '모니터'],
    '카테고리': ['주변기기', '주변기기', '액세서리', '주변기기', '디스플레이'],
    '가격': [25000, 55000, 32000, 48000, 200000],
    '재고수량': [150, 80, 200, 60, 30]
}

df = pd.DataFrame(data)



(1) 컬럼 선택과 추가

# 단일 컬럼 선택 (Series 반환)
product_names = df['제품명']
print("📋 제품명 목록:")
print(product_names)
print(f"타입: {type(product_names)}")  # Series

# 여러 컬럼 선택 (DataFrame 반환)
subset = df[['제품명', '가격']]
print("\n💰 제품명과 가격:")
print(subset)
print(f"타입: {type(subset)}")  # DataFrame

# 새 컬럼 추가: 가격이 5만원 이상인지 여부
df['프리미엄'] = df['가격'] >= 50000
print("\n🏷️ 프리미엄 여부 컬럼 추가:")
print(df)



(2) 조건 필터링

# 가격이 4만원 이상인 제품
expensive_products = df[df['가격'] >= 40000]
print("💸 가격 4만원 이상 제품:")
print(expensive_products)

# 재고가 100개 이상인 제품만 필터링
in_stock = df[df['재고수량'] >= 100]
print("\n📦 재고 100개 이상:")
print(in_stock)

# 특정 카테고리 필터링 (isin 사용)
peripherals = df[df['카테고리'].isin(['주변기기'])]
print("\n🖥️ 주변기기 카테고리 제품:")
print(peripherals)



(3) 정렬

# 가격 오름차순 정렬
sorted_by_price = df.sort_values('가격')
print("🔽 가격 낮은 순 정렬:")
print(sorted_by_price)

# 재고수량 기준 내림차순 정렬
sorted_by_stock = df.sort_values('재고수량', ascending=False)
print("\n🔼 재고 많은 순 정렬:")
print(sorted_by_stock)

# 복합 정렬: 카테고리별로 묶고 가격 높은 순으로
multi_sorted = df.sort_values(['카테고리', '가격'], ascending=[True, False])
print("\n🧾 카테고리별 가격 내림차순 정렬:")
print(multi_sorted)



python 카테고리 내 다른 글 보러가기

첫 번째 글입니다 가장 최근 글입니다

댓글 남기기