ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 데이터분석 기초 6 - Pandas(Series) 2차원, 배열
    Python 데이터 분석 2022. 10. 31. 10:24

     

    # Pandas
    # - 고수준의 자료구조(Series, DataFrame)와 빠르고 쉬운 데이터 분석용 자료구조 및 함수를 제공한다.
    # - NumPy의 고성능 배열 계산 기능과 스프레드시트
    # - SQL과 같은 RDMBS의 유연한 데이터 조작 기능을 갖고 있다.
    # - 세련된 인덱싱 기능으로 쉽게 데이터를 재배치하여 집계 등의 처리를 편리하게 한다.
    
    import pandas as pd
    from pandas import Series, DataFrame
    import numpy as np
    
    # Series는 일련의 객체를 담을 수 있는 1차원 배열과 같은 구조로 색인을 갖는다.
    obj = Series([3, 7, -5, 4])
    # obj = Series((3, 7, -5, 4))
    # obj = Series({3, 7, -5, 4}) # TypeError : 'set' type is unordered. 순서가 없기 때문에 사용 불가능
    print(obj, type(obj))
    
    obj2 = Series([3, 7, -5, 4], index = ['a', 'b', 'c', 'd'])
    print(obj2)
    print(obj2.sum(), ' ', np.sum(obj2), ' ', sum(obj2))
    # pandas, numpy, python 순서대로의 함수이다.
    print(obj2.mean(), obj2.std())
    print()
    print(obj2.values)  # 배열로 반환한다.
    print(obj2.index)   # 인덱싱으로 반환한다.
    
    print()
    print(obj2[0], obj2['a'], ' ',  obj2[['a']])  # 숫자를 문자화해서 호출 가능
    print(obj2['a':'b'])   # 슬라이싱
    print(obj2[['a','b']]) # 인덱싱
    print(obj2[1:4])
    print(obj2[[2,1]])
    print(obj2 > 0)
    print('a' in obj2)  # 'a'가 obj2에 들어있는가, true를 반환
    
    print('dict로 Series 객체 생성')
    names = {'mouse':5000, 'keyboard':25000, 'monitor':'350000'}
    obj3 = Series(names)
    print(obj3) # dict 타입은 순서는 없지만 키 벨류값이기 때문에 가능하다.
    
    obj3.index = ['마우스','키보드','모니터']
    print(obj3)
    
    print()
    obj3.name = '상품가격'
    print(obj3)
    
    # DataFrame :
    # 표 모양(2차원 형태 차료)의 자료구조로 여러 개의 칼럼을 갖는다. (Series가 모인 형태)
    # 각 칼럼은 서로 다른 종류의 값을 기억할 수 있다.
    
    print()
    df = DataFrame(obj3) # Series로 DataFrame 객체 생성.
    print(df)
    
    # 같은 길이의 리스트에 담긴 dict type의 데이터를 이용해 DataFrame 객체 생성.
    print()
    data = {
        'irum':['홍길동', '한국인', '신기해', '공기밥', '한가해'],
        'juso':('역삼동', '신당동', '역삼동', '역삼동', '신사동'),
        'nai':[23, 25, 33, 30, 35],
    }
    print(data)
    
    frame = pd.DataFrame(data)
    print(frame, type(frame))
    
    print(frame['irum'])                 # irum만 호출
    print(frame.irum, type(frame.irum))  # irum만 호출, Series type
    
    print()
    print('열 순서 변경')
    print(DataFrame(data, columns = ['juso', 'irum', 'nai']))
    
    print()
    frame2 = DataFrame(data, columns = ['juso', 'irum', 'nai', 'tel'], index = ['a', 'b', 'c', 'd', 'e'])
    print(frame2) # tel은 value 값이 없으므로 NaN으로 표시된다.
    
    frame2['tel'] = '111-1111' # 모든 행에 적용
    print(frame2)
    
    val = Series(['222-2222', '333-3333', '444-2222'], index = ['b', 'c', 'd'])
    frame2['tel'] = val # b, c, d만 적용
    print(frame2)
    
    print()
    print(frame2.T) # transpose, 행과 열의 위치를 바꾼다.
    
    print(frame.values) # 2차원으로 결과가 반환된다.
    print(frame.values[0,1]) # 0행 1열 값을 호출
    print(frame.values[0:2]) # 0행과 1행 값을 2차원으로 호출
    
    print()
    frame3 = frame2.drop('d') # axis = 0, d행 삭제
    print(frame3)
    
    frame4 = frame2.drop('tel', axis = 1) # 열 방향은 무조건 axis를 넣어주어야 된다.
    print(frame4)
    
    print()
    print(frame2)
    # index명/열이름으로 정렬
    print(frame2.sort_index(axis=0, ascending=False)) # 내림차순(ascending=False)
    print()
    print(frame2.sort_index(axis=1, ascending=False))  # 오른차순(ascending=True)
    print()
    print(frame2.rank(axis=0)) # 사전순으로 순위를 매길 수도 있다.
    
    print()
    print(frame2['juso'].value_counts())
    
    print()
    data = {
        'juso':['강남구 역삼동', '중구 신당동', '강남구 대치동'],
        'inwon':[23, 25, 15]
    }
    
    fr = DataFrame(data)
    print(fr)
    result1 = Series([x.split()[0] for x in fr.juso])
    result2 = Series([x.split()[1] for x in fr.juso])
    print(result1)
    print(result2)
    print(result1.value_counts())
    
    
    <console>
    0    3
    1    7
    2   -5
    3    4
    dtype: int64 <class 'pandas.core.series.Series'>
    a    3
    b    7
    c   -5
    d    4
    dtype: int64
    9   9   9
    2.25 5.123475382979799
    
    [ 3  7 -5  4]
    Index(['a', 'b', 'c', 'd'], dtype='object')
    
    3 3   a    3
    dtype: int64
    a    3
    b    7
    dtype: int64
    a    3
    b    7
    dtype: int64
    b    7
    c   -5
    d    4
    dtype: int64
    c   -5
    b    7
    dtype: int64
    a     True
    b     True
    c    False
    d     True
    dtype: bool
    True
    dict로 Series 객체 생성
    mouse         5000
    keyboard     25000
    monitor     350000
    dtype: object
    마우스      5000
    키보드     25000
    모니터    350000
    dtype: object
    
    마우스      5000
    키보드     25000
    모니터    350000
    Name: 상품가격, dtype: object
    
           상품가격
    마우스    5000
    키보드   25000
    모니터  350000
    
    {'irum': ['홍길동', '한국인', '신기해', '공기밥', '한가해'], 'juso': ('역삼동', '신당동', '역삼동', '역삼동', '신사동'), 'nai': [23, 25, 33, 30, 35]}
      irum juso  nai
    0  홍길동  역삼동   23
    1  한국인  신당동   25
    2  신기해  역삼동   33
    3  공기밥  역삼동   30
    4  한가해  신사동   35 <class 'pandas.core.frame.DataFrame'>
    0    홍길동
    1    한국인
    2    신기해
    3    공기밥
    4    한가해
    Name: irum, dtype: object
    0    홍길동
    1    한국인
    2    신기해
    3    공기밥
    4    한가해
    Name: irum, dtype: object <class 'pandas.core.series.Series'>
    
    열 순서 변경
      juso irum  nai
    0  역삼동  홍길동   23
    1  신당동  한국인   25
    2  역삼동  신기해   33
    3  역삼동  공기밥   30
    4  신사동  한가해   35
    
      juso irum  nai  tel
    a  역삼동  홍길동   23  NaN
    b  신당동  한국인   25  NaN
    c  역삼동  신기해   33  NaN
    d  역삼동  공기밥   30  NaN
    e  신사동  한가해   35  NaN
      juso irum  nai       tel
    a  역삼동  홍길동   23  111-1111
    b  신당동  한국인   25  111-1111
    c  역삼동  신기해   33  111-1111
    d  역삼동  공기밥   30  111-1111
    e  신사동  한가해   35  111-1111
      juso irum  nai       tel
    a  역삼동  홍길동   23       NaN
    b  신당동  한국인   25  222-2222
    c  역삼동  신기해   33  333-3333
    d  역삼동  공기밥   30  444-2222
    e  신사동  한가해   35       NaN
    
            a         b         c         d    e
    juso  역삼동       신당동       역삼동       역삼동  신사동
    irum  홍길동       한국인       신기해       공기밥  한가해
    nai    23        25        33        30   35
    tel   NaN  222-2222  333-3333  444-2222  NaN
    [['홍길동' '역삼동' 23]
     ['한국인' '신당동' 25]
     ['신기해' '역삼동' 33]
     ['공기밥' '역삼동' 30]
     ['한가해' '신사동' 35]]
    역삼동
    [['홍길동' '역삼동' 23]
     ['한국인' '신당동' 25]]
    
      juso irum  nai       tel
    a  역삼동  홍길동   23       NaN
    b  신당동  한국인   25  222-2222
    c  역삼동  신기해   33  333-3333
    e  신사동  한가해   35       NaN
      juso irum  nai
    a  역삼동  홍길동   23
    b  신당동  한국인   25
    c  역삼동  신기해   33
    d  역삼동  공기밥   30
    e  신사동  한가해   35
    
      juso irum  nai       tel
    a  역삼동  홍길동   23       NaN
    b  신당동  한국인   25  222-2222
    c  역삼동  신기해   33  333-3333
    d  역삼동  공기밥   30  444-2222
    e  신사동  한가해   35       NaN
      juso irum  nai       tel
    e  신사동  한가해   35       NaN
    d  역삼동  공기밥   30  444-2222
    c  역삼동  신기해   33  333-3333
    b  신당동  한국인   25  222-2222
    a  역삼동  홍길동   23       NaN
    
            tel  nai juso irum
    a       NaN   23  역삼동  홍길동
    b  222-2222   25  신당동  한국인
    c  333-3333   33  역삼동  신기해
    d  444-2222   30  역삼동  공기밥
    e       NaN   35  신사동  한가해
    
       juso  irum  nai  tel
    a   4.0   5.0  1.0  NaN
    b   1.0   4.0  2.0  1.0
    c   4.0   2.0  4.0  2.0
    d   4.0   1.0  3.0  3.0
    e   2.0   3.0  5.0  NaN
    
    역삼동    3
    신당동    1
    신사동    1
    Name: juso, dtype: int64
    
          juso  inwon
    0  강남구 역삼동     23
    1   중구 신당동     25
    2  강남구 대치동     15
    0    강남구
    1     중구
    2    강남구
    dtype: object
    0    역삼동
    1    신당동
    2    대치동
    dtype: object
    강남구    2
    중구     1
    dtype: int64

     

     

    댓글

Designed by Tistory.