ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Pandas#1] Pandas 기초
    Machine Learning/numpy & pandas & maplotlib 2023. 8. 5. 20:35

    * 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판

    댓글

Designed by Tistory.