본문 바로가기

카테고리 없음

Pandas 시작하기 #1 : 데이터 분석 기초

 

 Pandas는 Python에서 데이터를 다루기 위한 대표적인 라이브러리 이다.

엑셀처럼 표 형태의 데이터를 쉽게 다루고 분석할 수 있으며, 데이터 분석의 가장 유명한 라이브러리중 하나이다.


Pandas 설치

 Pandas를 간단히 설치하려면, 먼저 파이썬과 pip가 설치되어있어야 한다.

둘 모두 설치되어있다면

pip install pandas

를 터미널에 입력해 pip를 통한 설치가 가능하다.


Pandas  불러오기

 pandas를 파이썬코드에서 불러오려면, import를 사용하면 된다.

import pandas as pd

를 이용해 pandas를 불러올 수 있다.


Pandas의 기본 자료구조

판다스의 두 가지 대표적인 자료구조에는 시리즈(Series)와 데이터프레임(Dataframe)이 있다.

 

- 시리즈(Series)

Series는 1차원 데이터 구조로, 인덱스(index)와 값(value) 쌍으로 이루어져있다.

리스트와 비슷하지만, 인덱스를 직접 설정할 수 있고, 다양한 기능이 추가된 자료구조이다.

 

Series 기본 생성

import pandas as pd

data = [1, 2, 3]

s = pd.Series(data)

print(s)

 

-> 출력

0    1
1    2
2    3
dtype: int64

 

인덱스 직접 지정

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

 

-> 출력

a    10
b    20
c    30
dtype: int64

Pandas에서는 위와같이 index를 직접 설정이 가능하다. 즉 파이썬 딕셔너리, C++ 맵과 비슷하다.

 

그렇다면 딕셔너리로 선언을 하면 어떨까?

 

s = pd.Series({'a': 10, 'b': 20, 'c': 30})
print(s)

 직접 실행시켜 보자.

더보기
  • 키는 인덱스, 값은 데이터로 변환됨.

시리즈(Series)에서 자주 쓰이는 속성은 다음과 같다.

s.index 인덱스 객체
s.values 값만 추출 (numpy array)
s.dtype 데이터 타입
s.shape 모양 (몇 개 있는지)
s.name 시리즈의 이름 (지정 가능)

 

시리즈(series)는 리스트와 같이 슬라이싱이 가능하며, 전체 시리즈에대한 연산이 가능하다.

ex)

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

print(s['a'])     # 10
print(s[['a', 'c']])  # a와 c 인덱스 선택
print(s[0:2])     # 슬라이싱 (0~1번 인덱스)

# 합 연산
print(s + 1)     # 모든 값에 1 더함

# 곱 연산
print(s * 2)     # 모든 값에 2 곱함

 

시리즈 조건 필터링

시리즈(series)는 조건을 통해 일부분만 추출할 수 있다.

print(s[s > 15])   # 값이 15보다 큰 요소만 출력

 

이때, 시리즈에서 and, or연산자는 &(and), |(or)와같은 논리연산자를 사용하여야한다.

 

print(s[(s>=130) & (s <= 170)]) #130이상, 170이하인 요소

 

기타 함수

s.mean() 평균
s.sum() 합계
s.max() / s.min() 최대 / 최소
s.sort_values() 값 기준 정렬
s.sort_index() 인덱스 기준 정렬
s.value_counts() 값 별 개수 세기

 

- 데이터 프레임(Data Frame)

 이번엔 pandas.DataFrame에 대해 알아보자. DataFrame은 엑셀 표처럼 생긴 2차원 테이블로, 행(row)과 열(column)로 구성된 pandas의 핵심 구조이다.

 

데이터 분석에서 자주 사용되는 자료형이기에 한번쯤 공부해두는 편이 좋다.

 

Data Frame 기본 생성(딕셔너리)

Data Frame을 생성할떄는 딕셔너리나 리스트를 이용하는것이 가장 클래식하다.

 

data = {
    '이름': ['홍길동', '철수', '영희'],
    '나이': [23, 30, 27],
    '성별': ['남', '남', '여']
}

df = pd.DataFrame(data)
print(df)

 

-> 출력

    이름  나이 성별
0  홍길동  231  철수  302  영희  27

 

DataFrame 구조

구성 요소설명예시

인덱스 (index) 행 번호 0, 1, 2
컬럼 (columns) 열 이름 '이름', '나이', '성별'
값 (values) 실제 데이터 '홍길동', 23 등

 

DataFrame 속성

DataFrame에서 자주 쓰이는 속성들은 다음과 같다.

df.shape (행 수, 열 수)
df.columns 컬럼 이름 목록
df.index 인덱스 목록
df.values 값들 (numpy 배열)
df.dtypes 각 열의 데이터 타입
df.info() 전체 구조 요약
df.describe() 수치형 통계 요약

 

Data Frame 조건 필터링

 Data Frame도 Series와 같이 조건을 통해 일부 데이터만 추출하는것이 가능하다.

df[df['나이'] > 25]
df[df['성별'] == '여']

 

기타 함수

데이터 구조 확인/요약

함수설명예시
df.head() 앞부분 5개 행 보기 df.head(3)
df.tail() 마지막 5개 행 보기 df.tail(2)
df.shape (행 수, 열 수) 튜플 반환 (3, 5)
df.columns 열 이름 목록 Index([...])
df.index 행 인덱스 목록 RangeIndex(...)
df.info() 전체 요약 정보 메모리, 타입 등
df.describe() 수치형 통계 요약 평균, 표준편차 등

 데이터 선택 및 필터링

함수설명예시
df['열이름'] 열 선택 (Series) df['이름']
df[['열1', '열2']] 여러 열 선택 df[['이름', '나이']]
df.loc[인덱스] 행 선택 (라벨 기반) df.loc[0]
df.iloc[번호] 행 선택 (순서 기반) df.iloc[1]
df[df['나이'] > 25] 조건 필터링 필터링된 DataFrame

열/행 추가 및 삭제

함수설명예시
df['새열'] = 값 열 추가 df['주소'] = ['서울', '부산', '대구']
df.drop('열', axis=1) 열 삭제 df.drop('주소', axis=1)
df.drop(index) 행 삭제 df.drop(0)

정렬

함수설명예시
df.sort_values('열') 값 기준 정렬 df.sort_values('나이')
df.sort_index() 인덱스 기준 정렬 df.sort_index(ascending=False)