Pandas 주요 개념
- Series: 1차원 데이터 구조로, DataFrame의 한 열을 구성
- DataFrame: 2차원 표 형식의 데이터 구조로, 여러 개의 Series를 모아 구성
- 기술 통계 함수: 데이터 분석에 유용한 다양한 통계 함수 제공 (sum, mean, median, max, min, std, var, describe 등)
Series는 1차원 배열과 유사한 구조로, 각 요소는 고유한 인덱스를 가진다.
import pandas as pd
dict_data = {'a': 1, 'b': 2, 'c': 3}
sr = pd.Series(dict_data)
print(sr)
print(sr.index) # Index(['a', 'b', 'c'], dtype='object')
print(sr.values) # [1 2 3]
튜플 데이터를 Series로 변환할 때, 인덱스를 명시적으로 지정할 수 있다.
tuple_data = ("홍길동", '1991-01-25', '남', True)
sr = pd.Series(tuple_data, index=["이름", "생년월일", "성별", "학생여부"])
print(sr)
print(sr.index) # Index(['이름', '생년월일', '성별', '학생여부'], dtype='object')
print(sr.values) # ['홍길동' '1991-01-25' '남' True]
인덱스를 지정하지 않으면 기본적으로 0부터 시작하는 정수 인덱스가 부여된다.
sr = pd.Series(tuple_data)
print(sr)
print(sr.index) # RangeIndex(start=0, stop=4, step=1)
print(sr.values) # ['홍길동' '1991-01-25' '남' True]
list_data = ["홍길동", '1991-01-25', '남', True]
sr = pd.Series(list_data, index=["이름", "생년월일", "성별", "학생여부"])
print(sr)
print(sr.index) # Index(['이름', '생년월일', '성별', '학생여부'], dtype='object')
print(sr.values) # ['홍길동' '1991-01-25' '남' True]
DataFrame은 이차원 데이터 구조로, 행과 열을 가지고 있다. 각 열은 Series 객체로 이루어져 있으며, pandas의 핵심 데이터 구조이다.
dict_data = {'c0': [1, 2, 3], 'c1': [4, 5, 6], 'c2': [7, 8, 9], 'c3': [10, 11, 12], 'c4': [13, 14, 15]}
df = pd.DataFrame(dict_data)
print(df)
print("컬럼명:", df.columns) # 컬럼명: Index(['c0', 'c1', 'c2', 'c3', 'c4'], dtype='object')
print("인덱스명:", df.index) # 인덱스명: RangeIndex(start=0, stop=3, step=1)
df = pd.DataFrame([[15, '남', '서울중'], [17, '여', '서울여고'], [17, '남', '서울고']],
index=['홍길동', '성춘향', '이몽룡'], columns=['나이', '성별', '학교'])
print(df)
df.index = ["학생1", "학생2", "학생3"]
df.columns = ["age", "gender", "school"]
print(df)
df.rename(columns={"age": "나이"}, inplace=True)
df = df.rename(index={"학생1": "홍길동"})
print(df)
pandas는 기본적인 통계 함수들을 제공하여 데이터 분석을 용이하게 한다.
print(df.mean()) # 평균
print(df.sum()) # 합계
print(df.max()) # 최대값
print(df.min()) # 최소값
print(df.median()) # 중간값
print(df.std()) # 표준편차
print(df.describe()) # 기술 통계 정보
데이터를 조회할 때는 loc와 iloc를 사용하여 인덱스명이나 순서를 기준으로 선택할 수 있다.
print(df.loc["홍길동"]) # 행 조회 (인덱스명으로)
print(df.iloc[0]) # 행 조회 (순서로)
print(df[["수학", "영어"]]) # 열 조회 (여러 열)
print(df["수학"]) # 열 조회 (단일 열)
df.drop(["학생1"], axis=0, inplace=True) # 행 삭제
df.drop(["수학"], axis=1, inplace=True) # 열 삭제
del df["음악"] # 열 삭제
df2 = df # 얕은 복사
df3 = df[:] # 깊은 복사
df4 = df.copy() # 깊은 복사
df.loc["김삿갓"].describe() # 특정 행에 대한 통계 정보
df.describe() # 전체 데이터에 대한 기술 통계
df.info() # 데이터프레임의 간략 정보