본문 바로가기
Data/머신러닝

[파이썬머신러닝완벽가이드]01.파이썬 기반의 머신러닝과 생태계 이해: 판다스

by mozi2 2023. 4. 15.
반응형

1. Pandas

 데이터 처리를 위해 가장 인기 있는 라이브러리

대부분의 데이터 세트는 2차원 데이터 (행 X 열)

넘파이보다 훨씬 더 유연하게 핸들링 가능

판다스의 핵심 객체는 DataFrame( 여러 개의 행과 열로 이뤄진 2차원 데이터를 담는 데이터 구조체)

판다스는 DataFrame 으로 로딩할 수 있는 편리한 API를 제공한다.

 * 타이타닉 탑승자 데이터 파일 받기 

2. pandas 시작

- csv 파일 읽기

import pandas as pd

ti = pd.read_csv(r'C:\test.csv')
print(ti)

#결과

- Data Frame 크기 확인하기

print('DataFrame 크기:', ti.shape)

#결과
DataFrame 크기: (418, 11)

- info

print(ti.info())

- describe

print(ti.describe())

 모든 Series 와 DataFrame은 인덱스를 반드시 가진다.

 1) 데이터 자료형 변경

 DataFrame 은 기본적으로 2차원 데이터이다.

오른쪽에 있는 자료들을 DataFrame 로 만다는 경우  pd.DataFrame를 이용한다.

pd.to_dict()

한번에 DataFrame 를 dict 로 pd.to_dict('list')라는 코드롤 pd.values.tolist()대신 사용할 수 있다.

2) 생성, 수정, 삭제

대괄호 내부에 기존에 존재하는 column 명이 들어가면 수정

대괄호 내부에 기존에 존재하지 않은 column 명이 들어가면 생성

#새로운 열을 생성하는 경우 상수 대입 가능
df['new_col']=0

#기존에 존재하는 열(Age)을 가공하는 방식으로 새로운 열을 생성
df['Age_by_10']=df['Age']*10

#기존에 존재하는 복수개의 열을 가공하는 방식으로 새로운 열 생성
df['A_B']=df['A']+df['B']+100

3) 데이터 삭제

drop() 메서드를 이용

- labels: 삭제하고자 하는 인덱스 column 명 입력

- axis: 삭제를 행 방향으로 할지 유무, 열 방향으로 할지 정해주는 파라미터

- inplace: 원본 데이터를 행을 삭제한 데이터로 업그레이드할지(T), 유지(F) 정하는 파라밑

 

4) 인덱스

- DataFrames, series를 고유하게 식별하게 만들어주는객체

- df.index/series.index : 인덱스 객체만 추출할 수 있다.

- reset_index(): 새롭게 인덱스를 연속 숫자형으로 할당한다.

 

5) 데이터 설렉션 및 필터링

DataFrame['컬럼명']

판다스 객체에서 대괄호 안에 column 명만 들어가는 것이 아니기 때문에 대괄호 안에 column 명만 넣어주는것이 혼동을 막는다. 

불린 인덱싱은 가능하다.

titanic_df[titanic_df['Pclass']==3]

 

6) 데이터 추출

ix [] 연산자: 넘파이의 [] 역할과 동일

이를 대신할

.loc [ ] : 칼럼 명칭기반 인덱싱

.iloc[ ] : 칼럼 위치기반 인덱싱

df.loc[ ] : 행과 열 값으로 integer 또는 integer 형의 슬라이싱 팬시 리스트 값을 입력

df.iloc [ ] : 행 위치에는 DataFrame index 값을, 열 위치에는 column 명을 입력한다.

 

loc [ ] 에 슬라이싱 기호를 사용할 때는 (시작값)~(종료값)까지 표현된다. 

 

7) 불린 인덱싱

 iloc [ ] . loc [ ] 보다 불린 인덱싱으로 데이터 가져오는 경우가 많다. 

# 두 코드의 동일한 기능을 가지고 있다.

titanic_df[titanic_df['Age']>60][['Name'],['Age']]
titanic_df.loc[titanic_df['Age'] > 60, ['Name'],['Age']]

titannic_df [(조건)&(조건)&(조건)]

cond1 = 조건1, cond2=조건2, cond3=조건3

 

8) 정렬, aggregation 함수, GroupBy함수

DataFrame /series 정렬을 위해 sort_values()함수를 사용한다.

sort_values()에서 주요 파라미터는 by / ascending / inplace 이다. 

 sort_values(by =[ ' 칼럼명' ] 

 

9) Aggregation 함수

min(), max(), sum(),count() 등의 함수를 의미한다.

DataFrame.count() 같이 DataFrame.Aggregation함수를 사용하면, 각 column 에 대해서 해당 연산이 적용된다. 

특정 column만 연산이 필요한 경우 [   ] (대괄호) 를 이용한다.

titanic_df [['Age','Fare']].mean()

 

10) Group By 함수

by 파라미터의 인자로 들어가는 column의 값들에 따라 분류한다.

Aggregation 함수와 같이 쓰인느 경우가 많다.

titanic_groupby = titanic_df.groupby('Pclass').count()

 

11) Null 데이터 처리

NaN 으로 표현을 하기도 한다.

 - NaN 여부 확인: isna( ) 

  모든 값을 True / False 로 알려준다.

 .sum( ) 함수를 추가하면 column 마다 NaN 의 개수를 확인하는 것이 가능하다.

- NaN 값 대체: fillna( ) 

 해당 column 의 NaN데이터를 채워넣는다.

  titanic_df['Cabin'] = titanic_df['Cabin'].fillna(C000')

 

12) Apply / Lambda 함수

 일반 함수를 쓰면 되지 왜 임시함수인 lambda함수를 만들어서 사용하는가?

 - 함수를 만들어어야 하는데, 사용빈도나 비중이 작아 애매한 경우 

  연산이 복잡해서 함수를 써야하는데 반복문 함수 등이 마구 섞여 사용되지는 않아 일반함수를 만들어 사용하기에는 비효율적일때 lambda함수를 사용한다. 

 

 

728x90
반응형