Data Science/coding pratice

Pandas 복습 1

희스레저 2021. 2. 16. 15:02

목차

- Series와 DataFrame, 제목컬럼 추가

- csv, excel 파일 불러오기

- 컬럼 및 인덱스 재정의, 지정 (df.columns = [], df.index)

- info(), describe(), shape, head(), tail()

- index, column 정렬(sort)

- Boolean Indexing, isin색인(loc 활용)

- 결측값(Null) 알아보기

 

-df.copy : 그냥 바꿔서 df2 할당하면 기존의 df값도 수치가 계속 바뀜

-row, column 추가하기, 특정 row만 column 값 바꾸기)

-통계값(min, max, sum, mean, var, std ...)

-pivot_table


Import Pandas as pd

1) series

•pd.Series([1,2,3,4])

 

•a = [1,2,3,4]

pd.Series(a)

※ 똑같이 a라는 변수에 list를 할당한 다음, 각각 np.array와 pd.Series 지정해보기

단일 column을 Series라고 부르며, 앞의 숫자는 index number임

 

 

2) DataFrame

먼저 변수선언

 

company1 = [ ['삼성', 2000, '스마트폰'],

                     ['현대', 1000, '자동차'],

                     ['네이버', 500, '포털'] ]

pd.DataFrame(company1)

df1 = pd.DataFrame(company1)           # 변수 지정해서 저장하기

 

 

2-1) 제목 column 추가하기

df1 = pd.DataFrame(company1)

 

<방법1>: df.columns로 주기

df1.columns = ['기업명', '매출액', '업종']      **column 개수에 맞춰서 넣어줘야 오류가 나지 않음

 

<방법2>: dict로 주기

company2 = {'기업명' : ['삼성', '현대', '네이버'],

                  '매출액' : [2000, 1000, 500],

                  '업종' : ['스마트폰', '자동차', '포털']}        **Dict 활용

 

**여기서 참고: Dict 문법

Mydict = dict()

Mydict

>> {}

Mydict['going'] = 'seventeen'

Mydict

>> {going : seventeen}

 

 

2-2) index로 특정 column을 지정하기

df1.index = df1['기업명']

 

 

3) 파일 불러오기 : csv, excel 등

• 로컬 파일에서 불러오기

• Google Drive에서 샘플 파일 읽어오기

• 파일 URL로부터 바로 읽어오기

 

From google colab import drive

      Drive.mount('/content/drive')

>> authorization

filename = '경로복붙'

pd.read_csv(filename)

• pd.read_csv('http://~')

 

※ excel은 pd.read_excel로만 바꿔서 똑같이

 

 

4) 통계값(describe), 요약정보(info), 정렬(sort)

df = pd.read_csv('http://~~')

 

4-1) 기본정보 출력

• 열 출력

df.columns

• 열 이름 재정의      **위의 column 이름 줄 때와 똑같음, 변수 지정만 한 번 더 해줌

new_col = [ 'name', '그룹', '소속사' ]

df.columns = new_col

• 행 출력

df.index

rangeindex - 숫자범위의 인덱스

 

4-2) 요약정보(info) : df.info()

행의 정보와 데이터 타입을 알려준다.

주로 Nan 값과 데이터 타입을 볼 때 활용한다.

 

4-3) 통계값(describe) : df.describe()

통계정보 확인할 때 사용, 산술연산 할 수 있는 column만 출력하기 때문에 별로 안나온다.

(위의 float, in64만 산술연산 가능하므로 둘만 나옴)

 

4-4) 형태(shape) : df. shape

tuple 형태로 출력되며, 첫번째는 row 두번째는 column 갯수 출력

 

4-5) 상위, 하위 n개 정보 확인 : head, tail

df.head(), df.head(3)

df.tail(), df.tail(3)

 

4-6) 정렬(sort)

- Index 정렬

df.sort_index() / df.sort_index(ascending=false)      **ascending = False 내림차순

 

- Column 정렬

df.sort_values('키') / df.sort_values(by='키')

df.sort_values('키', ascending=false)

 

ex) df.sort_values(by='키',ascending=False)

 

**(bonus) 복수정렬, 내림차순

df.sort_value(['키', '브랜드평판지수'], ascending=false)

1번으로 키를 가지고 정렬한 후, 2번으로 브랜드평판지수를 기준으로 내림차순으로 정렬해줌

 

 

5) Selection - columns

df['이름']

df["이름"]

df.이름

 

6) Selection - loc, iloc (범위선택)

6-1) Range selection

• 단순 index : df[:3] (3미만)

 

6-2) loc : numpy와 달리 n이상 m이하

자주쓰니까 숙지!

df.loc['행', '열']

 

df.loc[:, 'name']

df.loc[;, ['name', 'birth']]     **쏙쏙 뽑아서 할 땐 리스트로 묶어줘라~

df.loc[2:5 ,'이름' : '생년월일']     **범위 출력도 가능~

 

6-3) iloc : i는 index, 번호로 가져오고 싶을 때. index와 column을 번호로 갖고 온다, numpy처럼 n:m이 n이상 m미만

df.iloc[:4, [0,2]]

 

7) Selection - Boolean Indexing (조건 selection)

true 값만 색인해냄, df[] 안에 조건을 넣으면 된다.

df[ df['키']<170]

출력값을 위해 df[df[컬럼]<조건] 해주는 것

but 보기불편함(모든 컬럼이 출력됨)

 

7-1) 특정 column만 출력하여 Boolean Indexing 하기

뒤에 출력할 columns 붙여주기

df[ df['키']<170]['이름']

df[ df['키']<170][['이름', '키']]

• loc 활용하기

df.loc[ df['키'<170], '이름']

         index condition

 

7-2) isin 색인 : '컬럼' 안 값 중 '조건'에 해당하는 값이 있는지 색출

My_condition = ['플레디스', 'SM']

df['소속사'].Isin(my_condition)

'소속사'라는 column의 값들 중 my_condition에 해당하는 값이 있는가?

>> true/false 값으로 출력됨(boolean indexing이니까)

 

df.loc[df['소속사'].isin(my_condition)]                     **df.loc[조건]

df.loc[df['소속사'].isin(my_condition), '소속사']       **단일 column만 series로 출력

 

 

cf) 조건에 해당하는 값 필터링하는 두번째 방법: 변수에 아예 조건문을 할당해서 loc부분에 변수만 넣기

my_condition = (df['소속사'] == '플레디스')

df.loc[my_condition]

 

 

8) 결측값 색인 : isnull, isna, notnull

8-1) Boolean indexing으로 다루기: df.isna()

is na? 빠진 값이냐고 묻는것

true값 return 될 경우 NaN값인 것

 

df.isna(): 전부 출력되어서 보기 힘들다는 단점)

isna, isnull

8-2) isnull

df['그룹'].isnull()

'그룹' column에 대하여 NaN값 확인

df.isnull도 됨

 

8-3) NaN값만 색출: isna, isnull 활용

df['그룹'][df['그룹'].isnull()]     df[컬럼][df['컬럼'.isnull()]

df['그룹'][df['그룹'].isna()]

 

df[ df['그룹'].isnull()]['그룹']

df[ df['그룹'].isna()]['그룹']

 

8-4) NaN값이 아닌 값 색출: notnull()

df['그룹'][df['그룹'].notnull()]

=df[ df['그룹'].notnull()]['그룹']

= df.loc[ df['그룹'].notnull(), '그룹']

 

df.loc[df['그룹'].isnull(), '이름']

= df.loc[df['그룹'].isnull()]['이름']

 

9) Copy : df.copy0

new_df = df 후, new_df에서 처리했을 때 똑같이 df 성분 값도 바뀐다. df의 메모리를 new_df가 참조하기 때문

copy_df = df.copy()     ** copy_df라는 새로 변수를 만든다.

 

 

 

10) row, column 추가, 삭제

• row의 추가 : append()

dict 형태로 각 column에 해당할 추가 값 적고, ignore_index=True

ex) df.append({'이름':'테디', '소속사':'YG'}, ignore_index=True)

 

• column의 추가 : df['새 컬럼명'] = '넣을 값'

df['국적']='대한민국'

하나의 컬럼이 생성되며 전체 값이 '넣을 값'으로 생성됨

 column 추가 후 특정 row의 column 값을 바꿀 때 : df.loc[]

df.loc[ df['이름'] = '지드래곤', '국적'] = 'korea'

→ df.loc[조건문, 'column 이름'] = '바꿀값'

 

11) 통계값(min, max, mean, vat, std, count, sum, median, mode)

산술적인 통계를 낼 수 있는 column에만 df.describe() 함수가 적용된다.

 

11-1) min, max

11-2) sum, mean

11-3) var(variation), std(standard deviation)

분산/표준편차: 데이터가 평균으로부터 얼마나 떨어져있는가

분산: {Σ(각 데이터 값 - 평균)^2}/n

표편: √분산

11-4) count, median

- count: row의 갯수 세기

- median: 오름차순으로 정렬한 다음 가운데 있는 값

11-5) mode: 최빈값

 

12) Pivot_table

=엑셀의 피벗테이블

데이터 열 중에서 두 개의 열을 각각 행 인덱스, 열 인덱스로 사용하여 데이터를 조회하고 펼쳐놓은 것

df가 아닌 pd를 받는다

 

pd.pivot_table(df, index='소속사', columns='혈액형', values='키')

처음에 df는 값을 가져올 변수, 그 안에서 가져올 행, 열, 값 차례대로 입력

데이터가 겹치는 경우 평균값이 출력되는데, sum을 활용하고 싶을 경우 aggfunc = np.sum을 붙임