파이썬/판다스

pandas 배우기 1편 EDA : 빅분기 ADP 데이터분석 시험 요약

Olivia-BlackCherry 2024. 10. 11. 12:43
이번에는 빅분기 시험 공부, ADP 시험 준비 하며 필수적인 pandas 공부 요약 정리해보도록 한다.

 

# pandas 라이브러리
import pandas as pd
import numpy as np

# 시각화 라이브러리
import matplotlib.pyplot as plt
import seaborn as sns

# 행 /열 최대로 보기
pd.set_option('display.max_rows',None)
pd.set_option('display.max_columns', None)

# 경고 무시
import warnings
warnings.filterwarnings("ignore")

 

0. 외부파일

불러오기

1) csv

pd.read_csv(" 이름.csv", header=?, index_col= ?)
index_col 이용해서, 특정열을 인덱스로 지정할 수 있음
 

2) excel

pd.read_excel("이름.xlsx", sheet_name=? , header= ?, index_col=None)
sheet_name 설정 가능
header 설정 가능

index_col = None 인덱스 생성 안함(기본값)

index_col = 1 ( 1번째 컬럼을 인덱스로 생성)

pd.read_excel("/content/final(11.10).xlsx", index_col=0)


 

3) json

pd.read_json(" .json")
 

저장하기

데이터이름.to_csv(".csv", index = ? , encoding=?)
- 인코딩
utf-8-sig  : UTF-8 인코딩에 BOM이 추가된 형식으로 윈도우와 엑셀 같은 프로그램과의 호환성을 위해 사용함
index : True/ False 기존 인덱스 가져갈지 말지 결정

df4.to_excel("/content/final(11.10).xlsx")


 
 
 

1. Series

판다스에서 시리즈는 파이썬의 list와 같이, 데이터를 나열해 놓은 묶음이다. 
pandas는 Series 메소드를 사용해서 [1.2.3.4.5] 데이터를 보기 좋게 시각화 해준다.

create_seriese= pd.Series([1,2,3,4,5])

 
 

2. DataFrame

Frame은 사각형을 말한다. Series는 단순한 1차원이었다면, Frame은 2차원 이상의 차원이다. 
DataFrame에 데이터를 넣을 때는 특정 열, 행, 인덱스에 의미를 담아 넣는다. 
 

< 데이터 만들기 >

1) list()

Columns= list('ABCD")

 -> ['A', 'B', 'C', 'D']
 

2) date_range(시작날짜, 기간)

dates = pd.date_range("20220905", periods=3)

->DatetimeIndex(['2022-09-05', '2022-09-06', '2022-09-07'], dtype='datetime64[ns]', freq='D')
 

3) random.randn(a, b) 

정규분포를 따르는 무작위 수를 a*b차원 만큼 생성
 
 

< 데이터프레임 만들기 >

1) pandas.DataFrame(행, 인덱스, 열)

dataframe = pd.DataFrame(row, index = dates, columns= columns)

 

2) Dictionary -> DataFrame

 
 

3. 데이터보기

1) head() / tail()

앞/뒤 5개의 행만 보여준다. 
( ) 안에 숫자를 넣으면 원하는 개수만큼 볼 수 있다. 
head(10), tail(3) 등

 

2) index, columns

DataFrame의 index와 columns를 보여준다.

 

3) shape

DataFrame.shape
(Row, Column) 차원을 보여줌

(10,6) 
 
 

4) info()

기본 정보
클래스 유형 
행인덱스 개수 
열 이름, 개수, 널값, 타입
memory

 
 

5) dtypes

자료형 확인
series, dataframe 가능
원소 불가능 -- > type(원소)

  판다스 파이썬
정수형 데이터 int64 int
실수형 데이터 float64 float
문자열 데이터 object string
시간 데이터 datetime64
timedelta64
없음
(datetime 라이브러리 활용)

 

 

x.astype vs float(x)

astype은 시리즈 전체에 적용하는 메서드이다.

 

 

6) select_dtypes(include =['??'])

선택하고싶은 데이터타입만 뽑아낼 때 사용한다.

df.select_dtypes(include=['number'])

 

df.select_dtypes(include=['object'])

 

 

df.select_dtypes(include=['float', 'object'])

 

 

7) describe()

기술통계정보
- count, mean, std, min, 4분위값, max

include="all"
include="O"

 
 

8) count() vs size()

count()

각 열의 유효한 값의 개수 계산

결측값 제외함

 

size()

그룹화된 데이터에서 각 그룹의 행의 수를 반환

결측값 포함

 

9) value_counts()

각 열의 고유값이 갖는 개수를 센다.

 
기본적으로 null값은 제외하고 보여주는데, null값의 개수도 보여주게 하려면
.value_counts(dropna=False)

 

10) unique()

Series.unique()
각 열이 갖는 고유값을 보여준다.

 

11) 통계 함수

mean(), median(), max(), min(), std(), corr()
모든 열 또는 특정 열에서 사용 가능

 
 
 
 

4. 데이터 수정

1) rename

index, column 이름 변경

 

2) drop 

row, column 삭제
inplace=True 실제 값 수정
axis=1, axis=0 에 따라 열인지 행인지 기준 선택

 

3) loc, iloc

행, 열, 원소 선택
loc : 이름이 기준이 됨, 범위의 끝 포함

 
iloc : index 숫자 그 자체에 의미가 있음, 범위의 끝 제외

 
 

4) 추가

- 열추가

DataFrame['추가하려는 열 이름'] = 데이터값

 

- 행추가

DataFrame.loc['추가하려는 행 이름'] = 데이터값
* iloc은 안됨

 

5) 변경

loc / iloc

 
 

6) Transpose

행과 열 바꾸기
DataFrame.transpose() / DataFrame.T

 
 

7) 열 순서 바꾸기

- columns 대입하기

- 객체에 컬럼 지정하기
 

 

8) 열 분리 & 추출

가. 함수 이용

- 날짜 값인 date열에 주목

 

연월일(yyyymmdd형식)까지만 추출

연/월/일 추출

- lambda함수 이용

- get함수 이용
*우선 -로 연결된 날짜데이터생성

*문자열메소드인 split로 list 속성의 시리즈 만들기

*get() 함수로 값 추출하기

 

나. 정규표현식 regex 사용

 

* contains
해당 정규식이 포함되어 있는 행 추출

regex=False : 정규식 없이 단순한 문자열로 찾고 싶은 경우

case = False : 대소문자 구분하지 않은 경우


(1) 한국어 
[가-힣]

diff_location['region'].str.contains('부산광역시[가-힣]+')
# 여집합 추출
# 부산광역시라고 안붙어있는 모든 것 추출
~diff_location['region'].str.contains('부산광역시[가-힣]+')

 
 
(2) 영어
[A-Za-z]

 
 
(3) 숫자
[0-9]

 
 ex) Chips 단어가 포함된 행 모두 추출하기

df['item_name'].str.contains('Chips')

해당 행 보기

df.loc[df['item_name'].str.contains('Chips'), :]

 


*extract
해당 정규식이 포함되어 있는 값 추출
'(  )' 안에 넣어야 함
expand=True : 결과를 데이터프레임형태로 반환
expand=False : 결과를 시리즈 형태로반환

df['Make'].str.extract('(A[A-Za-z]+)')

 
*findall
문자열에 포함된 모든 정규식표현을 추출
리스트로 반환
- 한자리 숫자 : r'\d'
- 연속된 숫자 : r'\d+'
- 문자열에 있는 모든 숫자 리스트로 추출 : (r'\d+')

df['Make'].str.findall('[A-Za-z]+')

 

 

 

.str의 역할

판다스 시리즈문자열 메서드를 적용하고자 할 때 쓴다.

 문자열 메서드 : upper(), lower(), replace(), slice() 등

 

 

startswith(), endswith(), find()

startswith()

문자열이 특정 문자들로 시작하는지 확인하는 메서드

대소문자를 구분함

 

endwith()

문자열이 특정 문자로 끝나는지 확인하는 메서드

대소문자를 구분함

 

find()

문자열 안에서 특정 문자의 위치를 찾음. 없으면 -1

 

 

 

 

5. 인덱스 

1) set_index

특정 열을 행 인덱스로 설정
기존 인덱스는 삭제 

 

2) reindex()

행 인덱스 재배열
기존 DataFrame에 포함되지 않은 행인덱스는 NaN값으로 입력됨

 
 NaN값 채우려면 fill_value 넣기

 
 

3) reset_index

행인덱스 초기화 (0,1,2,3,4,,,)
기존의 행인덱스는 첫 번째 열로 이동

 

drop=True

 

 

4) as_index= True/False

groupby는 그룹화된 컬럼을 인덱스로 사용하여 결과를 반환한다.

 

그룹화된 결과를 DataFrame 형태로 반환하도록 만드는 옵션이다. 

as_index=False는 그룹화된 컬럼들이 일반적인 열로 포함되며, 인덱스는 기본 순서대로 설정된다.

 

 

6. 정렬

1) sort_index(ascending=? )

행 인덱스 기준으로 데이터프레임 값 정렬 
ascending =True 오름차순
ascending = False 내림차순

 
 

2) sort_value(by =?, ascending=? )

특정 열을 기준으로 오름차순 /내림차순 정렬

 
 

7. 연산

원리
같은 것끼리 계산함
그러기 위해서
1단계 행/열 인덱스 기준으로 원소 정렬 
2단계 동일한 위치 원소끼리 1:1 대응 
3단계 연산처리

 

 
 
 

8. 필터링

1) mask 

- 비트연산자 & , | 

- ( ) 괄호 필수!
※ and/or 연산자는 두 개의 불린 값에서만 작용하기 때문에 안됨

mask = (df.Price>20) & (df.Price <30)
df[mask]

- loc 이용 가능

df.loc[mask, ['Type','Price']]

 

-  관계연산자 ==,  !=

mask1 = df['MPG.city']==25
mask2 = df['MPG.city'] == 20
mask3 = df['MPG.city']==22
df[mask1|mask2|mask3]

 
 

2) isin()

filter = df['MPG.city'].isin([25,20,22])
filter

 
 
 

pandas 요약 데이터분석 배우기 ADP 기본기 빅분기 기본기