사용 데이터 : 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, '포털']])
dict로 생성할 때
df_dict = {'기업명': ['삼성', '현대','네이버'],
'매출액':[2000, 1000, 500],
'업종':['스마트폰','자동차','포털']}
{ 열 : [행 값들] } 형태로 DataFrame을 만들 수 있다.
이제 밑에 보이는 데이터를 이용해 DataFrame을 자세히 다뤄보겠다.
데이터 수정
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 |