본문 바로가기

Data Analysis/Exploratory Data Analysis

Pandas (2) Column 조작

Chapter 2: DataFrame 필수 연산

 
In [3]:
import pandas as pd
import numpy as np
pd.options.display.max_columns = 40
 

DataFrame에서 복수의 열 선택

  • 방법 1. DataFrame[[사용할 컬럼들]]
  • 방법 2. 같은 방법인데 이중 인덱스 안에 길게 표기하는 게 싫을 때.. -> 아래에 따로 추가된 사항 방법이 이거임
    • cols = [사용할 컬럼들]
    • DataFrame[cols]
 
In [4]:
movie = pd.read_csv(r'C:\Users\user\jupyterpractice\EDA\Pandas-Cookbook-master\data\movie.csv')
movie_actor_director = movie[['actor_1_name', 'actor_2_name', 'actor_3_name', 'director_name']]  # 이중 인덱스 안하면 에러뜬다 ! 주의!!
# 이중인덱스를 사용하거나 or cols = [선택할 컬럼들]로 지정한 후, movie[cols]로 뽑던가 (같은 거임)
movie_actor_director.head()
 
Out[4]:
  actor_1_name actor_2_name actor_3_name director_name
0 CCH Pounder Joel David Moore Wes Studi James Cameron
1 Johnny Depp Orlando Bloom Jack Davenport Gore Verbinski
2 Christoph Waltz Rory Kinnear Stephanie Sigman Sam Mendes
3 Tom Hardy Christian Bale Joseph Gordon-Levitt Christopher Nolan
4 Doug Walker Rob Walker NaN Doug Walker
 
In [5]:
movie[['director_name']].head()
 
Out[5]:
  director_name
0 James Cameron
1 Gore Verbinski
2 Sam Mendes
3 Christopher Nolan
4 Doug Walker
 

기존에 쓰던 방식) 사용할 column을 list로 미리 지정 후 indexing

 
In [8]:
cols =['actor_1_name', 'actor_2_name', 'actor_3_name', 'director_name']
movie_actor_director = movie[cols]
movie_actor_director.head(3)
 
Out[8]:
  actor_1_name actor_2_name actor_3_name director_name
0 CCH Pounder Joel David Moore Wes Studi James Cameron
1 Johnny Depp Orlando Bloom Jack Davenport Gore Verbinski
2 Christoph Waltz Rory Kinnear Stephanie Sigman Sam Mendes
 

★★메서드를 사용한 열 선택

  • select_dtypes & filter 두 가지 메서드 존재
    1. select_dtypes
      • select_dtypes : 특정 데이터 타입의 열만 뽑아 낼 수 있음
      • dataframe.select_dtypes(include=['data type])
    1. filter
      • filter method : 사용된 매개변수에 따라 열 이름 or 인덱스 레이블을 검색
      • 매개변수
        • like : 문자열 검색
        • regex : 정규식 검색
        • items : 정확한 열 이름의 리스트를 입력으로 받아들임
          • items는 columns 명칭으로 구성된 cols list로 dataframe[cols]하는 방식과 동일
          • but, dataframe[cols]는 컬럼명 잘못 입력 -> Error
          • filter method + items 매개변수 -> 컬럼명 잘못 입력해도 Error X. 잘 입력된 것만 extraction
      • dataframe.filter(like='검색하려는 문자열') -> like 매개변수로 전달된 문자열을 포함한 column을 모두 추출
 
In [15]:
# data set loading & index를 movie_title로 해보기
movie = pd.read_csv(r'C:\Users\user\jupyterpractice\EDA\Pandas-Cookbook-master\data\movie.csv', index_col='movie_title')
movie.dtypes.value_counts()
 
Out[15]:
float64    13
object     11
int64       3
dtype: int64
 
 
In [7]:
# select_dtypes mothod : 특정 데이터 타입의 열만 뽑아 낼 수 있음
# 정수 열만 선택하기
movie.select_dtypes(include=['int']).head()
 
Out[7]:
  num_voted_users cast_total_facebook_likes movie_facebook_likes
movie_title      
Avatar 886204 4834 33000
Pirates of the Caribbean: At World's End 471220 48350 0
Spectre 275868 11700 85000
The Dark Knight Rises 1144337 106759 164000
Star Wars: Episode VII - The Force Awakens 8 143 0
 
In [8]:
# 숫자로된 모든 열을 선택하려면 include 매개변수에 'number' 전달
movie.select_dtypes(include=['number']).head()
 
Out[8]:
  num_critic_for_reviews duration director_facebook_likes actor_3_facebook_likes actor_1_facebook_likes gross num_voted_users cast_total_facebook_likes facenumber_in_poster num_user_for_reviews budget title_year actor_2_facebook_likes imdb_score aspect_ratio movie_facebook_likes
movie_title                                
Avatar 723.0 178.0 0.0 855.0 1000.0 760505847.0 886204 4834 0.0 3054.0 237000000.0 2009.0 936.0 7.9 1.78 33000
Pirates of the Caribbean: At World's End 302.0 169.0 563.0 1000.0 40000.0 309404152.0 471220 48350 0.0 1238.0 300000000.0 2007.0 5000.0 7.1 2.35 0
Spectre 602.0 148.0 0.0 161.0 11000.0 200074175.0 275868 11700 1.0 994.0 245000000.0 2015.0 393.0 6.8 2.35 85000
The Dark Knight Rises 813.0 164.0 22000.0 23000.0 27000.0 448130642.0 1144337 106759 0.0 2701.0 250000000.0 2012.0 23000.0 8.5 2.35 164000
Star Wars: Episode VII - The Force Awakens NaN NaN 131.0 NaN 131.0 NaN 8 143 0.0 NaN NaN NaN 12.0 7.1 NaN 0
 
  • filter method : 사용된 매개변수에 따라 열 이름 or 인덱스 레이블을 검색
 
In [16]:
# like 매개변수에 입력한 키워드 -> 열 or index에 해당 키워드가 포함되면 추출
movie.filter(like='facebook').head()
 
Out[16]:
  director_facebook_likes actor_3_facebook_likes actor_1_facebook_likes cast_total_facebook_likes actor_2_facebook_likes movie_facebook_likes
movie_title            
Avatar 0.0 855.0 1000.0 4834 936.0 33000
Pirates of the Caribbean: At World's End 563.0 1000.0 40000.0 48350 5000.0 0
Spectre 0.0 161.0 11000.0 11700 393.0 85000
The Dark Knight Rises 22000.0 23000.0 27000.0 106759 23000.0 164000
Star Wars: Episode VII - The Force Awakens 131.0 NaN 131.0 143 12.0 0
 
In [17]:
# filter method의 regex 매개변수 -> 정규식(regular expressions)을 사용해 열을 검색할 수 있음. 
movie.filter(regex='\d').head() # '\d' : 이름에 숫자가 포함된 모든 열을 검색
 
Out[17]:
  actor_3_facebook_likes actor_2_name actor_1_facebook_likes actor_1_name actor_3_name actor_2_facebook_likes
movie_title            
Avatar 855.0 Joel David Moore 1000.0 CCH Pounder Wes Studi 936.0
Pirates of the Caribbean: At World's End 1000.0 Orlando Bloom 40000.0 Johnny Depp Jack Davenport 5000.0
Spectre 161.0 Rory Kinnear 11000.0 Christoph Waltz Stephanie Sigman 393.0
The Dark Knight Rises 23000.0 Christian Bale 27000.0 Tom Hardy Joseph Gordon-Levitt 23000.0
Star Wars: Episode VII - The Force Awakens NaN Rob Walker 131.0 Doug Walker NaN 12.0
 
In [19]:
# items 매개변수로는 list type의 입력이 들어감 -> 정확한 열 이름이 들어감
# 장점 : dataframe[cols]는 잘못된 column명이 있으면 error -> but filter는 error없이 정확히 일치하는 column만 데려옴
movie.filter(items=['actor_1_name', 'asdf']).head()
 
Out[19]:
  actor_1_name
movie_title  
Avatar CCH Pounder
Pirates of the Caribbean: At World's End Johnny Depp
Spectre Christoph Waltz
The Dark Knight Rises Tom Hardy
Star Wars: Episode VII - The Force Awakens Doug Walker
 
 
 

'Data Analysis > Exploratory Data Analysis' 카테고리의 다른 글

Pandas (5) Method Chaining  (0) 2021.09.29
Pandas (4) Dataframe 연산  (0) 2021.09.28
Pandas (3) Column 네이밍  (0) 2021.09.27
Pandas (1) 데이터 정보 확인  (0) 2021.09.23