[Python.Pandas] DataFrame Series 추출, loc/iloc 이해하기

2020. 12. 16. 05:00Python과 머신러닝/Pandas 데이터 분석

0. 이전 포스트

 

[Python.Pandas] Pandas 기본 - DataFrame, Series, Index의 이해

1. 판다스란? 판다스란 구조화된 데이터의 처리를 지원하는 python 라이브러리이다. Python 계의 엑셀이라고 표현하면 가장 정확한 표현이라고 생각한다. NumPy와 통합하여 강력한 스프레드시트 처리

coding-grandpa.tistory.com

 

1. Dict Data를 Pandas로 변환하기

In [1]:from pandas import Series, DataFrame 
       import pandas as pd 
	   import numpy as np

In [2]:raw_data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
                   'last_name' : ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze'], 
                   'age' : [42, 52, 36, 24, 73], 
                   'city': ['San Francisco', 'Baltimore', 'Miami', 'Douglas', 'Boston']} 
                   raw_data
Out[2]:{'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
        'last_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze'], 
        'age': [42, 52, 36, 24, 73], 
        'city': ['San Francisco', 'Baltimore', 'Miami', 'Douglas', 'Boston']}
        
In [3]:df = pd.DataFrame(raw_data, 
                         columns = ['first_name', 'last_name', 'age', 'city'], 
                         index=[1,2,3,4,5]) 
       df
Out[3]:	  	first_name  last_name 	age 	city
		1  	Jason		Miller		42		San Francisco
		2   Molly		Jacobson	52		Baltimore
		3   Tina		Ali			36		Miami
		4   Jake		Milner		24		Douglas
		5   Amy			Cooze		73		Boston
  • dict type으로 원하는 데이터를 생성한 뒤에
  • pd.DataFrame을 통해 DataFrame 객체를 생성할 수 있다.
  • 이때 columns를 지정해줄 수 있고, index도 지정할 수 있다.

 

2. Series 데이터 추출하기

In [4]:df['first_name'] #series 뽑기
Out[4]:1 Jason 
       2 Molly 
       3 Tina 
       4 Jake 
       5 Amy 
       Name: first_name, dtype: object
       
In [5]:df.loc[:, 'last_name'] # series로 추출
Out[5]:1 Miller 
       2 Jacobson 
       3 Ali 
       4 Milner 
       5 Cooze 
       Name: last_name, dtype: object

In [6]:df.loc[:, ['last_name']] # dataframe으로 추출
Out[6]:
	last_name
1	Miller
2	Jacobson
3	Ali
4	Milner
5	Cooze
  • 하나의 DataFrame에서 원하는 Series를 추출하기 위해서는 index의 이름으로 접근하면 된다.
  • 새로운 Series(Column)을 추가하고 싶다면 df[새로운 index 명]으로 추가할 수 있다.
  • 이를 df.loc[:, 'last_name']과 같은 식으로 표현할 수도 있다.
  • 위 데이터를 dataframe 형태로 추출하고 싶다면 column 명에 []를 추가해서
    df.loc[:, ['last_name']]이라고 하면 된다.

 

3. DataFrame에 Series 추가/제거하기

In [5]:df['elderly'] = df.age > 50
       df
Out[5]:
	first_name	last_name	age	city		elderly
1	Jason		Miller		42	San Francisco	False
2	Molly		Jacobson	52	Baltimore	True
3	Tina		Ali		36	Miami		False
4	Jake		Milner		24	Douglas		False
5	Amy		Cooze		73	Boston		True

In [6]:df.drop('elderly', axis=1)
Out[6]:
	first_name	last_name	age	city		
1	Jason		Miller		42	San Francisco
2	Molly		Jacobson	52	Baltimore	
3	Tina		Ali		36	Miami
4	Jake		Milner		24	Douglas
5	Amy		Cooze		73	Boston	
  • df['elderly'] = df.age > 50은 df의 age가 50보다 큰 경우 True, 아닌 경우 False를 넣어서 새로운 Column을 추가하는 것이다.
  • df.drop('elderly', axis=1)을 통해서 column 중 elderly를 제거해달라는 동작을 수행할 수 있다.

 

4. df.loc과 df.iloc의 지옥 - 기본

In [6]:df.loc[1]
Out[6]:first_name Jason 
       last_name Miller 
       age 42 
       city San Francisco 
       Name: 1, dtype: object

In [7]:df.iloc[1]
Out[7]:first_name Molly 
       last_name Jacobson 
       age 52 
       city Baltimore 
       Name: 2, dtype: object
  • df.loc은 'index명으로 row의 정보를 추출'할 때 사용되는 명령어입니다.
    • 그렇기 때문에 df의 1 이라는 이름을 가진 데이터를 찾아서 Jason Miller 씨의 데이터를 추출한다.
  • df.iloc은 'index 번호로 row의 정보를 추출'할 때 사용되는 명령어입니다.
    • 즉, dataframe의 index명은 난 모르겠고, 원래 C에서 접근하던대로 index번호로 접근하고 싶을 때 무작정 쓸 수 있는 것이 .iloc입니다.
    • 그렇기 때문에 df.iloc[1]은 index명은 전혀 상관하지 않고 0-base index의 1번째 (즉 2번째) 데이터를 추출하여 전달합니다.

 

5. df.loc과 df.iloc의 지옥 - 심화

In [8]:s = pd.Series(np.nan, 
                     index=[49,48,47,46,45,1,2,3,4,5]) 
       s
Out[8]:49 NaN 
       48 NaN 
       47 NaN 
       46 NaN 
       45 NaN 
       1 NaN 
       2 NaN 
       3 NaN 
       4 NaN 
       5 NaN 
       dtype: float64

In [9]:s.loc[:3]
Out[9]:49 NaN 
       48 NaN 
       47 NaN 
       46 NaN 
       45 NaN 
       1 NaN 
       2 NaN 
       3 NaN 
       dtype: float64

In [10]:s.iloc[:3]
Out[10]:49 NaN 
        48 NaN 
        47 NaN 
        dtype: float64
  • 예시를 위해서 49~5까지 이상한 순서를 가진 index의 series를 생성한다.
  • In[9]와 같이 s.loc[:3]이라 하면 '3이라는 index명을 가진 row까지 전부 출력하라'는 의미가 되기 때문에,
    실제 index 값과는 무관하게 49~3까지 전부 출력한다
  • In[10]과 같이 s.iloc[:3]이라 하면 '3번째 index까지 row 정보를 출력하라'는 의미가 되기 때문에
    49~47까지의 값들만 출력한다.
  • loc과 iloc은 직접 써보기 전까지는 항상 헷갈리지만, 한번 사용해보면 생각보다 간단한 개념이다.

 

6. 관련 포스트

 

[Python.Pandas] DataFrame / Series 간 Operation 이해

1. Series 간 연산 이해하기 In [1]:import pandas as pd from pandas import Series, DataFrame import numpy as np In [2]:s1 = Series(range(1,6), index= list("abced")) s1 Out[2]:a 1 b 2 c 3 e 4 d 5 dtype..

coding-grandpa.tistory.com

 

[Python.Pandas] Selection과 Drop

1. 원하는 Row만 선택하기 loc과 iloc 원하는 Row만 선택하기 위해서는 지난 포스트에서 정리한 loc과 iloc에 대해서 이해하는 것이 가장 중요하다. 2020/12/16 - [Python과 머신러닝/Pandas 데이터 분석] - [Pyth

coding-grandpa.tistory.com