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 홍길동 23 남
1 철수 30 남
2 영희 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) |