Python/Pandas

[pandas] 데이터프레임 (DataFrame)

노트북 산 김에 공부 2023. 3. 13. 17:38

사용 데이터 : http://bit.ly/ds-korean-idol

 

pandas는 데이터 분석을 위한 패키지이다.

개발, 엑셀로 할 수 있는 모든 것들 처리 가능, DB, 엑셀 파일, 데이터베이스 핸들링 가능

import pandas as pd

Series

 

1차원, 1개의 column은 Series라 한다

a = [1, 2, 3, 4]
pd.Series(a)
   # S 대문자


DataFrame

2차원으로 이루어진 데이터 배열을 의미한다. Series가 여러 개 모이면 DataFrame

df1 = pd.DataFrame([['삼성', 2000, '스마트폰'],
                    ['현대', 1000, '자동차'],
                    ['네이버', 500, '포털']])


이상적인 DataFrame 생성


dict로 생성할 때
df_dict = {'기업명': ['삼성', '현대','네이버'], 
           '매출액':[2000, 1000, 500], 
           '업종':['스마트폰','자동차','포털']}

{ 열 : [행 값들] } 형태로 DataFrame을 만들 수 있다.

 

이제 밑에 보이는 데이터를 이용해 DataFrame을 자세히 다뤄보겠다.

https://bit.ly/ds-korean-idol


데이터 수정

 

inplac = True 를 해야 변경 데이터가 저장된다.
axis = 1 은 열을 선택한다

row

row 추가

 

key(행) values(열) 형태로 추가하므로 dict로 추가한다.

ignore_index = true 를 해야 에러가 안난다. - 원래 인덱스 무시하고 0부터 다시 지정하라는 의미

df = df.append({
      '이름' : '테디',
      '그룹' : '테디그룹',
      '소속사' : '끝내주는소속사',
      '성별' : '남자',
      '생년월일' : '1970-01-01',
      '키' : 195.0,
      '혈액형' : 'O',
      '브랜드평판지수' : 12345678
}, ignore_index = True)

 

row 삭제

 

.drop( index )를 이용해 인덱스 번호로 삭제할 수 있지만.

특정 데이터를 삭제하고싶으면 .drop( ) 안에 [ 조건식 ].index 로 인덱스 번호를 넣어야한다.

inplace = True로 저장한다.

df.drop(df[df['이름'] == '테디'].index, inplace=True)

 

row 수정

 

밑에서 배울 .loc를 이용해 [행/열] = value 형식으로 넣어주면 된다.

df.loc[df['이름'] == '태연', ['그룹']] = 'Oh!GG' # = 로 넣어주기 때문에 inplace가 필요없다.


column

column 추가

 

.insert( 추가할 index, column명, values )

      # 위치 # 열 이름 # 기본값
df.insert(3, '국적', '대한민국')

df [ '국적' ] = '대한민국' 으로 해도 되지만 무조건 맨 뒤에 삽입돼서 필자는 insert를 더 선호한다.

 

column 삭제

 

.drop( 삭제할 칼럼명, axis = 1, inplace = True)

               # 열 지정   # 값 저장
df.drop('국적', axis = 1, inplace=True)

 

column 이름변경

 

전체 column 명을 바꿀려면 df . columns = [ 각 순서에 맞는 새로운 칼럼명 ]

특정 column 명을 바꿀려면 .rename ( columns = { old : new } ,   inplace=True

# 전체 변경은 df.columns = ['', '', '', '', ...]
df.rename(columns = {'이름' : 'name'}, inplace=True)


통계값

.info( ) 데이터 정보

 

info 메소드는 null 값과 데이터 타입을 볼 때 활용

df.info()

  • 데이터 15개
  • 누락 데이터(그룹 1, 키 2)

 

.describe( ) 통계 정보

 

숫자형 데이터의 통계적 수치를 구해준다

df.describe()

 

min, max, sum, mean, var, std, count

 

min( ) : 최소값      mean( ) : 평균      count( ) 갯수

max( ) : 최대값     var( ) : 분산

sum( ) : 합계         std( ) : 표준 편차

df['키'].min()


정렬

.sort_index( )

 

행 인덱스 번호를 기준으로 정렬시킨다... ascending = False는 내림차순

df.sort_index() # ascending = True가 디폴트
df.sort_index(ascending = False)

 

.sort_values( )

 

데이터 값을 기준으로 정렬시킨다

column 복수 선택 시킬려면  [ ' ', ' ' ]  형태가 돼야한다 ... 슬라이싱은 [ ] 사용 X

   		   # 내림차순	   # (이름, 키) 열만 출력
df.sort_values('키', ascending = False)[['이름', '키']]


loc[ ] iloc[ ]

column 복수 선택 시킬려면  [ ' ', ' ' ]  형태가 돼야한다 ... 슬라이싱은 [ ] 사용 X

  • loc[ ]는 명칭(label) 기반 인덱싱 방식. 데이터프레임의 인덱스 값으로 행 위치 지정, 칼럼의 명칭으로 열 위치 지정                                    [인덱스, 칼럼명]                                                                                                                                                                                                                   명칭 기반 인덱싱에서 슬라이싱을 '시작점 : 종료점'으로 지정할 때 시작점에서 종료점을 포한 위치 데이터 반환

 

  • iloc[ ]는 위치(Location) 기반 만 가능. interger location의 약어로 행과 열 위치를 0을 출발점으로 하는 세로축, 가로축 좌표 정숫값으로 지정 [인덱스, 인덱스] .  정수형 값이 아닌 불린 값에 대해서는 지원하지 않는다 (조건식 사용 못함)               

 

.loc [인덱스, 칼럼명]
# 기본 인덱싱
df[0:4][['이름', '그룹', '키']]
		
# loc 		 
df.loc[0:3, ['이름', '그룹', '키']]
    # [][] 형태가 아닌 [ , ]로 행열 출력
    # start ~ end 까지 그대로 추출됨

 

.iloc [인덱스, 인덱스]
# loc
df.loc[2:5,'이름':'생년월일']

# iloc
df.iloc[2:5, 0:5]


 Boolean Indexing - 조건을 활용한 색인

Numpy Boolean 인덱싱과 같은 원리

 

그저 Boolean Index를 쓰면 모든 column을 출력해야 하는 단점이 있다, 이를 해결하려면

  • 맨 뒤에 출력할 column을 [ ]로 추가
  • loc[ ] 를 사용해 [조건식, 칼럼명] 활용 

 

[조건식]
# 기본 
df[df['키'] < 170][['이름', '키']]
		# 열 출력 위해서 맨 뒤에 [열] 추가
# loc 활용
df.loc[ df['키'] < 170, ['이름', '키'] ]

 

 [ (조건식1) & (조건식2) ]

 

만약 조건이 두개 이상인 데이터를 추출하려면 어떻게 해야할까? 조건식 마다 ()로 묶고 사이에 조건연산자를 붙이면 된다.

df.loc [ ( 조건식1 )  & 또는 |  ( 조건식2 )  ,  열 ] 

df.loc[(df['소속사'] == '플레디스') & (df['혈액형'] == 'O'), ['이름', '소속사', '혈액형'] ]


isin

조건을 걸고자 하는 값이 정의된 list에 있을 때 색인하려는 경우에 사용

.isin( )
df.loc[ df['소속사'].isin(['플레디스','SM']), ['이름','소속사'] ]  
		# 소속사 값이 '플레디스', 'SM' 인 경우 True


Null 값

 .isna( )   .isnull( )

 

Null 값이 있으면 해당 행은 True가 된다

# 특정 열을 지정해서 Null값을 알아낼 수 있다
df['그룹'].isna()
df['그룹'].isnull()

 

.notnull( )

 

Null 값이 있으면 해당 행은 False가 된다

df['그룹'].notnull() 
#null 값을 false로

 

.dropna( )

 

Null값은 많은 예외상황을 만들기 때문에 없애는 편이 좋습니다.

.dropna( )를 이용해 쉽게 null값을 없앨수 있습니다.

df.dropna(inplace=True)

 

Null값 과 같이 데이터 전처리에 관련한 문법은 

[pandas] 데이터 전처리로 정리하겠다.

'Python > Pandas' 카테고리의 다른 글

[pandas] 데이터 전처리  (0) 2023.03.20
[pandas] pivot_table, groupby  (0) 2023.03.19