Python/Pandas

[Pandas] Pandas 기본

죵욜이 2024. 12. 7. 21:12

1. 데이터 구조

  • Series - 1차원 배열
  • DataFrame - 행과 열로 구성된 2차원 데이터 구조 (표 형태)
더보기

Series

  • 1차원 배열
  • 엑셀의 한 열(column) 과 유사
  • 인덱스와(index) 와 데이터 값(Value) 이 쌍으로 구성
import pandas as pd

# Series 생성
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s)

# 인덱스로 접근
print(s['a'])  # 출력: 10

 

DataFrame

  • 2차원의 표 형태 데이터 구조
  • 엑셀의 전체 시트(sheet) 와 유사
  • 각 열(column)은 Series
# DataFrame 생성
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35]}
df = pd.DataFrame(data)
print(df)

# 특정 열 선택
print(df['Name'])

# 행 선택 (iloc: 위치 기반, loc: 라벨 기반)
print(df.iloc[1])  # 두 번째 행
print(df.loc[0])   # 첫 번째 행

2. 데이터 로드 및 저장

  • CSV 파일
  • Excel 파일
  • JSON 파일

등 다양한 형식의 데이터 로드 및 저장 가능

더보기

(1) CSV 파일

# CSV 파일 읽기
df = pd.read_csv('data.csv')

# CSV 파일 저장
df.to_csv('output.csv', index=False)

 

(2) Excel 파일

# Excel 파일 읽기
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# Excel 파일 저장
df.to_excel('output.xlsx', index=False)

 

(3) JSON 파일

# JSON 파일 읽기
df = pd.read_json('data.json')

# JSON 파일 저장
df.to_json('data.json')

3. 데이터확인

  • df.shape : 데이터 크기 확인 (행, 열)
  • df.head() : 데이터 상위 n 개 확인 (기본값 5)
  • df.tail() : 데이터 하위 n 개 확인 (기본값 5)
  • df.info() : 데이터 요약 정보 (열, 데이터 타입, 결측값 등)
  • df.describe() : 통계 요약 정보
  • df.columns : 열 이름 확인
  • df.index : 인덱스 확인

4. 데이터 선택 및 변형

더보기

(1) 열 선택

# 특정 열 선택
print(df['column_name'])

# 여러 열 선택
print(df['col1', 'col2'])

 

(2) 행 선택

# 특정 인덱스 행 선택 ( iloc : 위치, loc : 레이블 )
print(df.iloc[0])     # 첫번째 행
print(df.loc[0])     # 인덱스 레이블이 0인 행

# 특정 조건으로 필터링
filtered_df = df[df['column_name'] > 10]
print(filtered_df)

 

 (3) 데이터 정렬

# 특정 열 기준으로 정렬
df = df.sort_values(by='column_name')

# 내림차순 정렬
df = df.sort_values(by='column_name', ascending=False)

 

(4) 데이터 추가

# 새로운 열 추가
df['new_column'] = df['existing_column'] * 2

# 행 추가
new_row = {'col1' : 1, 'col2' : 10}
df = df.append(new_row, ignore_index=True)

 

(5) 데이터 삭제

# 열 삭제
df = df.drop('column_name', axis=1)

# 행 삭제
df = df.drop(0)     # 첫번째 행 삭제

5. 데이터 처리

더보기

(1) 결측값 처리

# 결측값 확인
print(df.isnull().sum())

# 결측값 채우기
df['column_name'] = df['column_name'].fillna(0)     # 0으로 채우기

# 결측값 삭제
df = df.dropna()     # 결측값이 포함된 행 삭제

 

(2) 중복값 처리

# 중복값 확인
print(df.duplicated())

# 중복값 제거
df = df.drop_duplicates()

 

 (3) 데이터 변환

# 데이터 타입 변환
df['column_name'] = df['column_name'].astype(float)

# 문자열 변환
df['column_name'] = df['column_name'].str.upper()   # 대문자로 변환

6. 그룹화와 집계

더보기
# 그룹화 후 합계 계산
grouped = df.groupby('category_column')['value_column'].sum()
print(grouped)

# 그룹화 후 여러 통계 계산
grouped = df.groupby('category_column').agg({
    'value_column': ['mean', 'sum', 'count']
})
print(grouped)

7. 데이터 병합과 결합

더보기

데이터 병합

df1 = pd.DataFrame({'id' : [1, 2], 'value1' : [10, 20]})
df2 = pd.DataFrame({'id' : [1, 2], 'value2' : [30, 40]})

merged = pd.merge(df1, df2, on='id')
print(merged)

 

 

데이터 결합

# 행 추가
concatenated = pd.concat([df1, df2], axis=0)

# 열 추가
concatenated = pd.concat([df1, df2], axis=1)

8. 시계열 데이터 처리

더보기
# Datetime 변환
df['date'] = pd.to_datetime(df['date'])

# 특정 기간 필터링
filtered = df[(df['date'] > '2023-01-01') & (df['date'] <= '2023-12-31')]

# 날짜를 인덱스로 설정
df.set_index('date', inplace=True)

9. 유용한 기타 함수들

# 고유값 확인
print(df['column_name'].unique())

# 값 개수 세기
print(df['column_name'].value_counts())

# 열 이름 변경
df.rename(columns={'old_name': 'new_name'}, inplace=True)

# 인덱스 리셋
df.reset_index(drop=True, inplace=True)