[Pandas#1] Pandas 기초
* pandas
- 표 형식의 데이터나 다양한 형태의 데이터를 다루는 데 초점을 맞춰 설계된 라이브러리.
- pandas는 배열 기반의 함수를 제공하는 등 numpy의 배열 기반 계산 스타일을 많이 차용했다.(numpy는 단일 산술 배열 데이터를 다루는 데 특화되어 있다.)
- pandas는 Series와 DataFrame 크게 두 가지 자료구조를 갖는다.
* import pandas as pd
라이브러리 호출. 관례적으로 pd로 이름을 지음.
# 데이터 불러오기 예시
data_url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data' #Data URL
# data_url = './housing.data' #Data URL
df_data = pd.read_csv(data_url, sep='\s+', header = None) #csv 타입 데이터 로드, separate는 빈공간으로 지정하고, Column은 없음
* Series 자료구조(class)
- Series는 일련의 객체를 담을 수 있는 1차원 배열 같은 자료구조(class)다.(어떤 Numpy 자료형이라도 담을 수 있다).
- Series는 색인(index)이라는 배열의 데이터와 연관된 이름을 가지고 있다.
- Series와 DataFrame은 로컬 네임스페이스로 임포트하는 것이 훨씬 편하다.
- Series는 고정 길이의 정렬된 dictionary라고 생각하면 된다.(색인 값과 데이터 값을 매핑하고 있으므로)
import pandas as pd
from pandas import Series, DataFrame
obj= pd.Series([4, 7, -5, 3])
obj
-----------------
0 4
1 7
2 -5
3 3
dtype: int64
1.obj.values : (attribute) 배열을 반환
왼쪽 줄이 index 오른쪽 줄이 values다. 각각의 값은 Series의 attribute를 호출하여 얻을 수 있다.
>>>obj.values
array([ 4, 7, -5, 3])
2. obj.index : (attribute) 인덱스의 객체를 반환
obj.index
RangeIndex(start=0, stop=4, step=1)
다음과 같이 index에 이름을 부여할 수도 있다. 또한 대입하여 변경도 가능하다.(obj.index=[...])
obj= pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
obj
-----------
d 4
b 7
a -5
c 3
dtype: int64
3. 파이썬의 사전 객체로부터 Series 객체를 생성할 수 있다.
capital_data={'한국':'서울', '중국':'베이징', '캐나다':'오타와'}
obj3=pd.Series(capital_data) # 색인에는 사전의 키값이 순서대로 들어간다.
obj3
-------------
한국 서울
중국 베이징
캐나다 오타와
dtype: object
4. name : (attribute) Series 객체와 색인 모두 name속성을 갖고 있다.
obj.name='capital'
obj.index.name='country'
obj
----------
country
한국 서울
중국 베이징
캐나다 오타와
Name: capital, dtype: object
* DataFrame
- DataFrame은 표 같은 스프레이드시트 형식의 자료구조(class)이고, 여러 개의 컬럼이 있는데 각 컬럼은 서로 다른 종류의 값(숫자, 문자열, 불리언 등)을 담을 수 있다.
- DataFrame은 row와 column에 대한 색인을 가지고 있다.(색인의 모양이 같은 Series 객체를 담고 있는 파이썬 사전과 비슷)
- 내부적으로 데이터는 리스트나 사전 또는 1차원 배열을 담고 있는 다른 컬렉션이 아니라 하나 이상의 2차원 배열에 저장된다. (물리적으로 2차원이지만 계층적 색인을 이용해서 더 고차원의 데이터를 표현할 수 있다)
- 흔한 생성 방법은 같은 길이의 리스트에 담긴 사전을 이용하거나 numpy배열을 이용하는 것이다.
1. DataFrame의 색인은 Series와 같은 방식으로 자동으로 대입되며 컬럼은 정렬되어 저장된다.(코랩에선 자동 정렬 안 되는 듯 하다.)
data={'state':['Ohio','ohio','ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame=pd.DataFrame(data)
frame
------------------------
state year pop
0 Ohio 2000 1.5
1 Ohio 2001 1.7
2 Ohio 2002 3.6
3 Nevada 2001 2.4
4 Nevada 2002 2.9
5 Nevada 2003 3.2
2. frame.head() : 처음 5개의 row만 출력한다.
frame.head()
------------------------
state year pop
0 Ohio 2000 1.5
1 Ohio 2001 1.7
2 Ohio 2002 3.6
3 Nevada 2001 2.4
4 Nevada 2002 2.9
3. DataFrame의 column은 사전 형식의 표기법이나 속성 형식으로 접근할 수 있다.
frame['state']
----------------------
frame['state']
0 Ohio
1 Ohio
2 Ohio
3 Nevada
4 Nevada
5 Nevada
Name: state, dtype: object
# 속성 형식으로 column의 values에 접근방식은
# 파이썬에서 사용 가능한 변수 이름 형식일 때만 작동한다.
frame.year
---------------
0 2000
1 2001
2 2002
3 2001
4 2002
5 2003
Name: year, dtype: int64
4. column 추가
frame=pd.DataFrame(data, index=['one','two','three','four','five','six'])
val=pd.Series([-1.2, 1.5, -1.7,], index=['two', 'four', 'five']) # 새로운 series객체 생성
frame['debt']=val # 존재하지 않는 column을 대입하면 새로운 컬럼을 생성한다.
frame
----------------------------
state year pop debt
one Ohio 2000 1.5 NaN # NaN은 결측값
two Ohio 2001 1.7 -1.2
three Ohio 2002 3.6 NaN
four Nevada 2001 2.4 1.5
five Nevada 2002 2.9 -1.7
six Nevada 2003 3.2 NaN
5. del 예약어 : column 삭제
# 'eastern' column 생성
frame['eastern']=frame.state=='Ohio'
frame
-----------------
state year pop debt eastern
one Ohio 2000 1.5 NaN True
two Ohio 2001 1.7 -1.2 True
three Ohio 2002 3.6 NaN True
four Nevada 2001 2.4 1.5 False
five Nevada 2002 2.9 -1.7 False
six Nevada 2003 3.2 NaN False
# 'eastern' column 삭제
del frame['eastern']
frame.columns
------------------------
Index(['state', 'year', 'pop', 'debt'], dtype='object') # 뷰
색인을 이용해서 얻은 컬럼은 내부 데이터에 대한 뷰(view)이며 복사가 이루어지지 않는다. 따라서 이렇게 얻은 Series 객체에 대한 변경은 실제 DataFrame에 반영된다. 복사본이 필요할 때는 Series의 copy 메서드를 이용해야한다.
6. T : ( attribute) column과 row를 뒤집는다.
frame.T
-----------------------------------
one two three four five six
state Ohio Ohio Ohio Nevada Nevada Nevada
year 2000 2001 2002 2001 2002 2003
pop 1.5 1.7 3.6 2.4 2.9 3.2
debt NaN -1.2 NaN 1.5 -1.7 NaN
7. values : (attribute) DataFrame에 저장된 데이터를 2차원 배열로 반환한다.
DataFrame의 column이 서로 다른 dtype을 가지고 있다면 모든 column을 수용하기 위해 그 column의 배열의 dtype이 선택된다.
frame.values
array([['Ohio', 2000, 1.5, nan],
['Ohio', 2001, 1.7, -1.2],
['Ohio', 2002, 3.6, nan],
['Nevada', 2001, 2.4, 1.5],
['Nevada', 2002, 2.9, -1.7],
['Nevada', 2003, 3.2, nan]], dtype=object)
* 참고
https://www.boostcourse.org/ai222
파이썬 라이브러리를 활용한 데이터분석 2판