본문 바로가기
데이터 분석/기초

[Python] Pandas 라이브러리 기초 1

by hyeok1235 2023. 1. 24.

Pandas는 데이터 분석을 위해 만들어진 파이썬 라이브러리입니다. 배열 계산에 특화된 NumPy를 기반으로 하는 Pandas는 구조화된 데이터를 빠르고 효율적으로 처리할 수 있다는 장점이 있습니다. 

 

① Pandas 호출하기

>>> import pandas as pd # Pandas 라이브러리를 pd라는 별칭으로 불러오기

 

② Series와 DataFrame

 

Pandas가 다루는 데이터 형태에는 Series와 DataFrame이 있습니다. 먼저 각각의 데이터들을 생성하는 방법을 알아본 뒤, 데이터들을 조작하는 방법에 대해서 알아봅시다.

 

  1) Series

Series 데이터는 NumPy의 배열에서 조금 더 보강된 형태입니다. Series의 인덱스는 기본값이 0부터 시작하는 정수값인데, 인덱싱 방법을 다른 숫자나 문자, 문자열로 지정할 수 있습니다. Series의 데이터 값들은 ndarray 형태로 저장됩니다.

>>> data = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
>>> data['c']
3
>>> type(data.values)
<class 'numpy.ndarray'>

 

Series를 생성하기 위해서 앞선 예처럼 리스트를 전달하는 것도 가능하지만, 딕셔너리를 전달할 수도 있습니다. 

>>> population_dict = {
... 'korea': 51,
... 'japan': 125,
... 'usa': 331
... }
>>> population_series = pd.Series(population_dict)
>>> population_series
korea	    51
japan	   125
usa	   331
dtype: int64

 

  2) DataFrame

DataFrame 데이터는 여러 개의 Series가 모여서 행과 열을 이룹니다. 

>>> gdp_dict = {
... 'korea' = 17,
... 'japan' = 43, 
... 'usa' = 250
... }
>>> gdp_series = pd.Series(gdp_dict)
>>> country = pd.DataFrame({
... 'gdp': gdp_series,
... 'population': population_series
... })
>>> country
        gdp  population
japan    43         125
korea    17          51
usa     250         331

 

Series를 생성할 때처럼, DataFrame을 생성할 때도 딕셔너리를 이용할 수 있습니다. 이때 딕셔너리가 가지고 있는 속성 중 하나를 set_index 메소드를 통해 인덱스로 지정할 수 있습니다. 

>>> country_info = {
... 'country': ['japan', 'korea', 'usa'],
... 'gdp': [43, 17, 250],
... 'population': [125, 51, 331]
... }
>>> country_df = pd.DataFrame(country_info)
>>> country_df
  country  gdp  population
0   japan   43         125
1   korea   17          51
2     usa  250         331
>>> country_df = country_df.set_index('country')    # 인덱스 지정
>>> country_df
        gdp  population
country
japan    43         125
korea    17          51
usa     250         331

 

앞서 인덱스로 사용할 속성을 지정했다면, 인덱스와 속성들 자체에 이름을 붙일 수 있습니다.

>>> country_df.index.name = "Country"
>>> country_df.columns.name = "Info"
>>> country_df.index
Index(['japan', 'korea', 'usa'], dtype='object', name='Country')
>>> country_df.columns
Index(['gdp', 'population'], dtype='object', name='Info')

 

③ 데이터 선택

  3-1) 컬럼 선택

DataFrame에서 특정 컬럼만 추출할 때는 우리가 지정한 컬럼명을 활용할 수 있습니다.

>>> country_df['gdp']   # Series 추출
country
japan     43
korea     17
usa      250
Name: gdp, dtype: object
>>> country_df[['gdp']]  # DataFrame 추출
         gdp
country
japan     43
korea     17
usa      250

 

  3-2) 인덱싱 & 슬라이싱

loc 메소드는 명시적인 인덱스를 참조하여 데이터를 인덱싱/슬라이싱할 수 있습니다. 즉, 우리가 지정한 인덱스의 이름으로 데이터를 선택하는 것입니다.

그런데 loc 메소드를 통해 슬라이싱을 할 때 주의할 점은, 시작 값과 마지막 값이 둘 다 포함된다는 것입니다. 우리가 익숙한 슬라이싱 방식은 다음과 같이 시작 값은 포함되고 마지막 값은 포함되지 않는 방식입니다. 예시와 코드를 참고해서 그 차이점을 기억합시다.

예시) exList[1:4] -> exList[1], exList[2], exList[3]

>>> country_df2.loc['korea']  # 인덱싱
gdp          17
population   51
NameL korea, dtype: int64
>>> country_df2.loc['japan':'korea', :'population']  # 슬라이싱 (Endpoints Inclusive)
          gdp    population
country
japan      43           125
korea      17            51

 

iloc 메소드는 사용자가 지정한 인덱스가 아닌, 파이썬 스타일의 정수 인덱싱/슬라이싱을 사용합니다. 우리가 익숙한 0부터 시작하는 인덱싱이자 마지막 값을 포함하지 않는 슬라이싱 방식입니다. 

>>> country_df2.iloc[1]  # 인덱싱
gdp          17
population   51
NameL korea, dtype: int64
>>> country_df2.iloc[0:2, :2]  # 슬라이싱 (Endpoints Exclusive)
          gdp    population
country
japan      43           125
korea      17            51

 

  3-3) 조건문 활용

Boolean 표현식이나 query 함수를 활용하여 특정한 조건들을 만족하는 데이터들만 추출하는 것도 가능합니다. 

>>> country_df[country_df['population'] < 100]
         gdp   population
country
korea     17           51
>>> country_df.query("gdp > 200")
         gdp   population
country
usa      250          331

 

④ 데이터 변경

  4-1) 데이터 추가 및 수정

이미 존재하는 데이터프레임에 리스트나 딕셔너리로 새로운 데이터를 추가할 수 있습니다.

>>> country_df.loc['china'] = [183, 1412]  # 리스트로 전달 
>>> country_df.loc['uk'] = {'gdp': 31, 'population': 67}   # 딕셔너리로 전달

 

  4-2) NaN 컬럼 추가

Pandas 라이브러리에서는 np.nan 값으로 비어 있는 데이터를 표현합니다. 따라서 새로운 컬럼을 NaN으로 초기화한 뒤, 나중에 적절한 데이터를 채울 수 있습니다. NaN 값은 각종 연산 과정에서 포함되지 않는 것이 기본 설정 값입니다. 

>>> country_df['Capital'] = np.nan
>>> country_df['korea', 'Capital'] = 'Seoul'

 

  4-3) 데이터 삭제

drop 메소드로 데이터프레임의 행이나 열을 삭제할 수 있습니다. 

* axis = 0 : 행 삭제 / axis = 1 : 열 삭제

** inplace = True : 원본 변경 O / inplace = False : 원본 변경 X

>>> country_df.drop('gdp', axis = 1, inplace = True)

 

728x90
반응형