본문 바로가기
Programming Languages/Python

Chapter 18. Pandas

by 더 이프 2023. 4. 12.
728x90

목차

    1. Pandas

    Pandas는 데이터 처리와 분석을 위해 파이썬 프로그래밍 언어용으로 작성된 라이브러리입니다. 행과 열로 이루어진 데이터 객체를 만들어 사용할 수 있으며 주로 대용량의 빅데이터를 처리하는데 매우 편리한 라이브러리리입니다.

    a. Series

    • Pandas의 고유한 자료구조로서 numpy의 1차원 구조와 유사
    • Series를 확인하면 index와 values 동시에 확인 가능
    • 리스트의 성분 갯수는 index의 갯수와 같음
    s1 = pd.Series(list('abcde'))
    print(s1)
    
    # 결과값
    0    a
    1    b
    2    c
    3    d
    4    e
    dtype: object

    b. DataFrame

    • Pandas의 고유한 자료구조로서 numpy의 2차원 구조와 유사
    • DataFrame은 파이썬의 dictionary 형태의 데이터를 정의
    • 키값의 갯수가 열의 갯수이고, 리스트의 성분 갯수들은 행의 갯수와 같음
    • 키값은 자동으로 열의 이름으로 결정
    s1 = pd.Series([x for x in range(10,20)])
    s2 = pd.Series([x for x in range(100,120)])
    s3 = pd.Series(list('abcdefghuijk'))
    
    df1 = pd.DataFrame({'a': s1, 'b': s2, 'c': s3})
    print(df1[:5])
    
    # 결과값
          a    b  c
    0  10.0  100  a
    1  11.0  101  b
    2  12.0  102  c
    3  13.0  103  d
    4  14.0  104  e
    • Series에 index를 지정 가능
    • NaN은 Not a Number를 의미하며 해당하는 값이 없다는 뜻
    s1 = pd.Series(list('abcde'), index=[x for x in range(5)])
    s2 = pd.Series(list('XYZF'), index=[3,2,5,1])
    df1 = pd.DataFrame({'a':s1, 'b':s2})
    print(df1)
    
    # 결과값
         a    b
    0    a  NaN
    1    b    F
    2    c    Y
    3    d    X
    4    e  NaN
    5  NaN    Z
    • replace함수로 데이터 값 대체 가능
    • replace 내에 inplace를 true로 해주면 원본 값을 바꿈
    • inplace가 false면 원본은 바뀌지 않기 때문에 다시 대입
    df1['a'] = df1['a'].replace(np.NaN,'xx')
    df1['b'].replace(np.NAN, 'ppp', inplace=True)
    print(df1)
    
    # 결과값
        a    b
    0   a  ppp
    1   b    F
    2   c    Y
    3   d    X
    4   e  ppp
    5  xx    Z

     

    2. Example

    a. iris

    • pandas는 주로 numpy와 같이 사용
    • read_csv함수를 사용하여 DataFrame구조로 데이터를 가져오며 header에 None을 적용하면 열 이름도 index처럼 표현
    import numpy as np
    import pandas as pd
    
    url ='https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
    iris_df = pd.read_csv(url, header=None)
    print(iris_df)
    
    # 결과값
           0    1    2    3               4
    0    5.1  3.5  1.4  0.2     Iris-setosa
    1    4.9  3.0  1.4  0.2     Iris-setosa
    2    4.7  3.2  1.3  0.2     Iris-setosa
    3    4.6  3.1  1.5  0.2     Iris-setosa
    4    5.0  3.6  1.4  0.2     Iris-setosa
    ..   ...  ...  ...  ...             ...
    145  6.7  3.0  5.2  2.3  Iris-virginica
    146  6.3  2.5  5.0  1.9  Iris-virginica
    147  6.5  3.0  5.2  2.0  Iris-virginica
    148  6.2  3.4  5.4  2.3  Iris-virginica
    149  5.9  3.0  5.1  1.8  Iris-virginica
    
    [150 rows x 5 columns]
    • DataFrame에는 index, columns를 사용하여 index정보와 columns 정보를 얻음
    • columns에 값에 열 이름 대입 가능
    • head()함수는 기본적으로 상위에서 5개의 데이터를 가져오며, 매개변수로 데이터의 갯수 지정 가능
    print(iris_df.index)
    print(iris_df.columns)
    iris_df.columns = list('abcde')
    print(iris_df.head())
    
    # 결과값
    RangeIndex(start=0, stop=150, step=1)
    Int64Index([0, 1, 2, 3, 4], dtype='int64')
         a    b    c    d            e
    0  5.1  3.5  1.4  0.2  Iris-setosa
    1  4.9  3.0  1.4  0.2  Iris-setosa
    2  4.7  3.2  1.3  0.2  Iris-setosa
    3  4.6  3.1  1.5  0.2  Iris-setosa
    4  5.0  3.6  1.4  0.2  Iris-setosa
    • insert는 새로운 열을 만들어 원하는 위치에 적용 가능
    • drop은 원하는 축의 데이터 삭제 가능
    iris_df.insert(2, 'x2',iris_df['a']/iris_df['b'])
    print(iris_df)
    iris_df_d = iris_df.drop(['a','d','e'], axis=1)
    print(iris_df_d.head())
    
    # 결과값
           a    b        x2    c    d               e
    0    5.1  3.5  1.457143  1.4  0.2     Iris-setosa
    1    4.9  3.0  1.633333  1.4  0.2     Iris-setosa
    2    4.7  3.2  1.468750  1.3  0.2     Iris-setosa
    3    4.6  3.1  1.483871  1.5  0.2     Iris-setosa
    4    5.0  3.6  1.388889  1.4  0.2     Iris-setosa
    ..   ...  ...       ...  ...  ...             ...
    145  6.7  3.0  2.233333  5.2  2.3  Iris-virginica
    146  6.3  2.5  2.520000  5.0  1.9  Iris-virginica
    147  6.5  3.0  2.166667  5.2  2.0  Iris-virginica
    148  6.2  3.4  1.823529  5.4  2.3  Iris-virginica
    149  5.9  3.0  1.966667  5.1  1.8  Iris-virginica
    
    [150 rows x 6 columns]
         b        x2    c
    0  3.5  1.457143  1.4
    1  3.0  1.633333  1.4
    2  3.2  1.468750  1.3
    3  3.1  1.483871  1.5
    4  3.6  1.388889  1.4