python pandas

Pandas

  • Array calculation에 특화된 numpy 기반의 python library.
    import pandas as pd
    

Series

  • Index와 Data를 가지는 Numpy array의 확장.
  • Series의 values는 ndarray 형태이다.
    import pandas as pd
    data = pd.Series([1,2,3,4])
    print(data)
    '''
    0 1
    1 2
    2 3
    3 4 
    '''
    print(data.values) # [1,2,3,4]
    
  • 데이터 타입을 지정할 수 있다.
    data = pd.Series([1,2,3,4], dtype=float)
    print(data.dtype) # float64
    
  • 인덱스를 지정하여 접근할 수 있다.
    data = pd.Series([1,2,3,4], index=['a','b','c','d'])
    data['a'] = 5
    print(data)
    '''
    a 5
    b 2
    c 3
    d 4
    '''
    
  • 딕셔너리를 사용해 Series 생성이 가능하다.
    population_dict = {
      'korea' : 1000,
      'china' : 100000,
      'usa' : 7654
    }
    population = pd.Series(population_dict)
    print(population)
    '''
    korea 1000
    china 100000
    usa 7654
    '''
    

DataFrame

  • 여러 개의 Series가 모여 행과 열을 이룬 데이터 집합
    population_dict = {
      'korea' : 1000,
      'china' : 100000,
      'usa' : 7654
    }
    population = pd.Series(population_dict)
    print(population)
    '''
    korea 1000
    china 100000
    usa 7654
    '''
    gdp_dict = {
      'korea' : 12345678,
      'china' : 1029283,
      'usa' : 28374663
    }
    gdp = pd.Series(gdp_dict)
    print(gdp)
    '''
    korea 12345678
    china 1029283
    usa 28374663
    '''
    country = pd.DataFrame({
      'gdp':gdp,
      'population':population
    }) # Series에 뚜껑을 덮는다.
    print(country)
    '''
          gdp       population
    korea   12345678  1000
    china   1029283   100000
    usa     28374663  7654
    '''
    
  • 딕셔너리를 사용하여 DataFrame 생성 가능
    data = {
      'country':['korea', 'china', 'usa'],
      'gdp':[12345678, 1029283, 28374663],
      'populatinon':[1000, 100000, 7654]
    }
    country = pd.DataFrame(data)
    country = country.set_index('country')
    print(country)
    '''
          gdp       population
    korea   12345678  1000
    china   1029283   100000
    usa     28374663  7654
    '''
    
  • DataFrame 속성
    print(country.shape)  # (3,2) 데이터는 3행 2열이다.
    print(country.size)   # 6
    print(counrty.ndim)   # 2 2차원 배열이다.
    print(country.values) 
    '''
    [
    [12345678  1000]
    [1029283   100000]
    [28374663  7654]
    ]
    '''
    country.index.name = "Country"
    print(country.index)
    # Index(['korea','china','usa'], dtype=object, name='Country')
    country.column.name = "Information"
    # Index(['gdp', 'population'], dtype=object, name='Information')
    
  • DataFrame을 파일로 저장, 로드 할 수 있다.
    country.to_csv("./country.csv")
    country.to_excel("country.xlsx")
    country = pd.read_csv("./country.csv")
    country = pd.read_excel("country.xlsx")
    

Select & Update DataFrame

  • 데이터 선택 : Indexing / Slicing
    # .loc : Index Name을 명시적으로 지정함으로써 Indexing, Slicing
    country.loc['korea']
    country.loc['korea':'usa', :'population']
    # .iloc : 정수형 Index로 접근한다.
    country.iloc[0]
    country.iloc[1:3, :2]
    
  • 컬럼명을 사용하여 DataFrame에서 데이터를 선택할 수 있다.
    print(country)
    '''
          gdp       population
    korea   12345678  1000
    china   1029283   100000
    usa     28374663  7654
    '''
    print(country['gdp'])  # Series
    '''    
    korea   12345678  
    china   1029283   
    usa     28374663  
    '''
    print(country[['gdp']])  # DataFrame
    '''
          gdp       
    korea   12345678  
    china   1029283   
    usa     28374663  
    '''
    
  • Masking, Query를 사용해 DataFrame에서 조건에 맞는 DataFrame을 가져올 수 있다.
    print(country[country['population'] < 5000])
    '''
          gdp       population
    korea   12345678  1000
    '''
    print(country.query("population > 5000"))
    '''
          gdp       population
    china   1029283   100000
    usa     28374663  7654
    '''
    
  • Numpy처럼 Series를 추가하여 DataFrame 컬럼을 추가할 수 있다.
    gdp_per_population = country['gdp'] / country['population']
    country['gdp per population'] = gdp_per_population
    print(country)
    '''
          gdp       population    gdp per population
    korea   12345678  1000          ...
    china   1029283   100000        ...
    usa     28374663  7654          ...
    '''
    
  • List, Dictionary를 사용해 데이터를 추가할 수 있다.
  • NaN 컬럼을 추가할 수 있다.
    df = pd.DataFrame(column=['Name', 'Address', 'Age'])
    '''
    Name    Address   Age
    '''
    df.loc[0] = ['Dog', '서울', 29] # List로 DataFrame 추가
    '''
        Name    Address     Age
    0     Dog     서울          29
    '''
    df.loc[1] = {'Name':'Cat', 'Address':'대전', 30} # Dictionary로 DataFrame 추가
    '''
        Name    Address     Age
    0     Dog     서울          29
    1     Cat     대전          30
    '''
    df.loc[1, '이름'] = 'Kitty' # 데이터 변경
    '''
        Name    Address     Age
    0     Dog     서울          29
    1     Kitty   대전          30
    '''
    df['Contact'] = np.nan # 새로운 컬럼 추가 후 초기화
    '''
        Name    Address     Age      Contact
    0     Dog     서울          29      NaN
    1     Kitty   대전          30      NaN
    '''
    df.loc[0, 'Contact'] = '01012345678' # 초기값 변경
    '''
        Name    Address     Age      Contact
    0     Dog     서울          29      01012345678
    1     Kitty   대전          30      NaN
    '''
    
  • DataFrame에서 drop 메서드로 컬럼을 삭제할 수 있다.
    df.drop('Contact', axis = 1, inplace=True)
    # axis = 1 : 열방향 삭제
    # axis = 0 : 행방향 삭제
    # inplace = True(원본삭제) / False(원본삭제하지 않는다.)