🚩 Pandas

: 테이블 형태로 데이터를 다를 수 있게 해주는 패키지(python용 엑샐)
: 기존 데이터처리 라이브러리인 numpy 대신 주로 사용
🧷import pandas as pd

❗데이터를 다룰 때 한번의 모든 조건 설정으로 최종 결과를 얻기보다는 하나하나 조건에 대한 결과를 확인하고 필요한 데이터 얻거나 저장
❗데이터가 변형이 많이 되었으면 중간 중간 데이터프레임 저장

📌 DataFrame

: 테이블 형태의 데이터 구조
: 다양한 형태의 데이터를 받아 사용할 수 있으며 다양한 통계, 시각화 함수 제공

🌈 데이터 불러오기

: pandas는 다양한 데이터 파일 형태를 지원하며 주로 csv, xlsx, sql, json 사용
🧷pd.read_csv(), pd.read_excel(), pd.read_sql(), pd.read_json(), pd.json_normalize() - json → dataframe
🖐️파라미터
경로를 사용하여 불러옴(절대경로 : 루트부터 모든 경로, 상대경로 : ./ 로 현재 경로까지는 축약)
✅sheet_name= : 파라미터로 전달하면 해당 시트만 데이터 로딩
✅encoding= 형태 지정 - utf-9, cp949 : 한글 지원


🌈 데이터 저장하기

: 데이터프레임을 다양한 파일 형태로 저장 가능
🧷to_csv(), to_excel(), to_sql()
🖐️파라미터
✅경로 + 이름 : 해당 경로에 해당 이름으로 저장
✅index = False : 기존 데이터프레임의 인덱스를 무시하고 저장


🌈 데이터 살펴보기

: 데이터를 불러들인 후 가장 처음 하는 작업
: 데이터의 구조, 형태 파악

🔹df.head()

: 데이터의 첫 5개 데이터 하나(샘플, 인스턴스, 관측치, 포인트) 확인
: n개를 읽어오고 싶다면 () 안에 읽어올 개수 n개 입력

🔹df.tail()

: 데이터의 마지막 5개 샘플 확인

🔹len(df), df.shape

: 데이터 개수, 데이터 shape 확인

🔹df.info()

: 데잍의 전반적인 정보 확인
: column, non-null count, dtype(object형은 string형으로 생각)

🔹df.describe()

: 데이터의 기초통계량 확인

🔹df.index

: 데이터의 인덱스 범위 출력

🔹df.columns

: 데이터프레임 내의 컬럼 모두 출력
🖐️for문으로 컬럼명 순환 가능 → for col_name in df.columns


🌈 데이터 접근하기

✨ 인덱싱, 슬라이싱, 샘플링

🔹시리즈(Serise)

: 각 컬럼이나 행 단위 접근했을 때 출력되는 벡터 데이터

🔹df.iloc[인덱스]

: 인덱스 넘버로 데이터에 접근
: 출력하고자 하는 샘플이 하나라면 벡터 데이터로 출력, 2개 이상은 데이터프레임 형태를 갖춤
: df.iloc[인덱스]. values 또는 index로 각각의 속성에 접근 가능

🔹df.take[인덱스]

: 해당 인덱스 데이터를 데이터프레임 형태로 출력(벡터 데이터 → 데이터프레임)

🔹컬럼 단위 샘플 접근

🧷df['컬럼명'], df[['컬럼명1', '컬럼명2' ...]], df[df.colums[시작인덱스 : 마지막 인덱스]]

🔹df.loc[인덱스, 추출하고자 하는 컬럼명]

: 로우와 컬럼을 동시에 슬라이싱 하는 속성
: 추출하고자 하는 컬럼명의 해당 인덱스 부분 추출
: 컬럼명 필수 아님, 2개 이상의 컬럼을 추출하고자 할때는 리스트로 전달
: 출력하고자 하는 샘플이 하나라면 벡터 데이터로 출력, 2개 이상은 데이터 프레임 형태를 갖춤
❗df.loc[]로 데이터프레임 값 업데이트 가능(조건 설정하여 바꾸고자 하는 값 찾아서 진행)
❗iloc는 인덱스로만 접근 가능

🔹팬시인덱싱

: bool 형태의 array를 조건전달하여 다차원 배열을 인덱싱하는 방법
: 조건식을 사용하여 분석에 필요한 데이터 샘플 추출 용이
: 여러 조건일 경우 괄호로 감싸주면 가독성 좋음
🧷df.loc[df['컬럼명] > 3, '추출하고자 하는 컬럼명']

🔑슬라이싱 모두 가능


🌈 데이터프레임 함수

🔑numpy 함수 사용 가능

🔹.value_counts()

: 벡터의 고유값을 카운트해서 내림차순 정렬
: 대소문자를 구분하기 때문에 데이터가 동일한 범주이지만 대소문자의 차이로 다른 데이터로 구분해 고유값을 각각 카운트
➡️동일한 범주로 만들기 위해 upper()나 lower()를 활용한 함수를 만들어 apply() 함수 활용

🔹.unique(), .nunique()

: 고유값 출력
: 고유값 개수 출력(정렬은 하지 않고 데이터 순서대로 출력)

🔹.sum(), .mean() 등 연산 함수

: ()안에 axis=0 또는 axis=1 설정으로 행 합계, 평균, 열 합계, 평균을 구할 수 있음

🔹.idxmax()

: 최대값의 인덱스 출력

🔹값 정렬

: 첫번째 값을 기준으로 우선 정렬
🧷df.sort_values(by=['컬럼1', '컬럼2' ...]) - 기본적으로 오름차순
🧷df.sort_values(by=['컬럼1', '컬럼2' ...], ascending = False) - 내림차순
🧷컬럼마다 오름차순, 내림차순 지정하고 싶다면 ascending = [True, False]

🔹.astype('변환할 자료형')

: 데이터 자료형을 변경
: 일자 시간 타입의 경우 to_datatime()
: 기본 데이터에 덮어써야함 → df['컬럼명'] = df['컬럼명].astype('자료형')

🔹.contains('찾을 문자열')

: 컬럼 내 문자열에 찾고자 하는 문자열이 포함되어 있는지를 기준으로 샘플링
: 결과값 bool전달 → df.loc[] 이용하여 샘플 추출
🧷df['컬럼명'].str.contains('찾을 문자열')
❗반드시 문자열로 바꿔주고 진행

🔹.apply()

: 파라미터로 받는 모든 데이터에 함수를 적용
🧷df['컬럼명'] = df['컬럼명'].apply(lambda x: func(x) if 조건문)
🧷df['컬럼명'] = df['컬럼명'].apply(함수명)


🌈 데이터프레임 병합

: 조각난 데이터를 분석에 필요한 데이터셋으로 만들기 위해 여러개의 데이터프레임을 하나로 병합

🔹데이터 병합에 사용가능한 key(병합할 기준이 되는 행/열)값이 있는 경우

🧷pd.merge(베이 스데이터프레임, 병합할 데이터프레임)
🖐️파라미터
✅how : 'left', 'right', 'inner', 'outer'
✅left_on : key값(컬럼명)이 다를 경우 베이스 데이터프레임의 key 설정(컬럼명으로 지정)
✅right_on : key값(컬럼명)이 다를 경우 병합 데이터프레임의 key 설정(컬럼명으로 지정)

🔹데이터 연결

🧷pd.concat([베이스 데이터프레임, 병합할 데이터프레임, axis= 0 또는 axis = 1])
🖐️파라미터
✅axis = 0 또는 axis = 1 : 데이터프레임을 연결할 축 방향 설정(default-행 기준)
✅ignore_index = True : 기존 인덱스를 무시하고 새로운 인덱스를 설정할지 파라미터 설정
→ 연결 후 df.index로 인덱스 확인

❗합치고자 하는 여러 데이터 프레임의 합치고자 하는 축 방향의 shape이 같아야 한다.(df.shape로 확인)

💭열방향(axis = 1)으로 데이터프레임을 연결할 경우
🍀(df.columns == df1.columns).all() : 두 데이터프레임 사이에서 다른 컬럼명이 있는지 확인(True/False)


🌈 인덱스 편집

: 인덱스가 제대로 설정되어있지 않은 경우 사용

🧷df.reset_index()
🖐️파라미터
✅drop = True : 기존 인덱스를 버리고 작업(True)할 것인지 설정
✅✨inplace = True : 원본값도 바꿀 것인지 설정(이 파라미터를 사용할 경우 인덱스가 변경된 데이터프레임을 다시 저장 안해도 됨 - df=df.reset_index() 필요 없음)

🧷df.set_index() : 데이터프레임의 컬럼값을 인덱스로 사용


🌈 컬럼 편집

: 컬럼을 변경해야 할 경우 컬럼 단위 샘플링 및 인덱싱, 이름 변경 가능
🧷df.columns - 데이터 프레임의 모든 컬럼명 리스트로 출력

🔸컬럼 선택

: 리스트 컴프리헨션으로 특정 조건의 컬럼명을 리스트에 저장
➡️원하는 데이터타입을 가진 컬럼명이나 특정 문자열을 가진 컬럼명 등 추출

: 인덱싱으로 특정 컬럼만 추출하여 사용(새로운 변수에 저장)

🔸컬럼 삭제

: 결측치가 너무 많거나 분석에 필요하지 않은 데이터 지울 경우 사용
🧷df.drop('컬럼명', axis=1, inplace=True)
🖐️파라미터
✅axis = 1 : 컬럼 삭제이기 때문에 열 방향 삭제
✅✨inplace = True : 원본값 변경(원본값이 삭제되는 것이기 때문에 미리 제대로 확인하고 진행)
🧷del df['컬럼명']

🔸컬럼명 변경

🧷df.rename({'기존 컬럼명' : '바꿀 컬럼명'}, axis = 1, inplace = True)

🌈 데이터 재구조화

: 샘플링을 통해 분석가가 설정한 조건에 따라 데이터를 선별하고 선별한 데이터에 작업을 추가하여 데이터 분석 진행
: 결과값은 데이터프레임으로 전달받음
❗groupby()와 pivot_table()의 결과값 차이점 : 피벗테이블은 인덱스 값 위에 column설정한 컬럼명이 존재

🔹groupby()

: 엑셀의 피벗테이블과 비슷한 기능
: 그룹화할 컬럼의 데이터를 그룹화하고 연산을 진행한 뒤 원하는 값 추출
🧷df.groupby('컬럼명').mean()/sum() 등 진행
✅결과값이 데이터프레임이기 때문에 원하는 값 추출 → 예를 들어 df.groupby('컬럼명).mean()['추출할 컬럼명']
✅데이터 프레임의 함수 사용 가능 → .sort_values() 가능

🔹pivot_table()

: values, index, columns을 이용하여 피벗테이블 형태로 연산값 얻을 수 있음
: 결과값은 데이터프레임으로 전달받음
🧷pd.pivot_table(데이터프레임,
            values = '값으로 들어갈 컬럼명',
            index = '테이블의 맨 왼쪽으로 테이블의 인덱스가 될 컬럼명',
            columns = '테이블의 맨 위쪽으로 테이블의 컬럼이 될 컬럼명',
            aggfunc = values가 어떤 연산을 진행하여 테이블의 값으로 채워질 것인지)
🖐️파라미터
✅데이터프레임
✅values = : 피벗테이블의 값
✅index = : 피벗테이블의 맨 왼쪽을 생각하면 됨
✅columns = : columns이 될 데이터프레임의 컬럼명을 설정해주면 컬럼명의 데이터가 카테고리로 분류되어 피벗테이블의 컬럼을 각각 이룸
✅aggfunc = : 피벗테이블의 값이 연산되어 나타날 값 ex) np.mean, np.sum, len(개수 count해줌) 등

🌈 결측치 처리

: 결측치 부분을 채우거나 삭제
: 중앙값, 평균갑 등으로 채우기
: 범주형 데이터의 경우 최빈값으로 채우기

🔹결측치가 있는지 확인

🧷df.info() - 데이터 프레임 전체적으로 확인
🧷df['컬럼명'].isnull() - 컬럼별 결측치 확인(결과값 : bool)
→ df.loc(df['컬럼명'].isnull()) - 컬럼별 결측치 아닌 데이터 확인

🔹결측치 채우기

🧷df['컬럼명'].fillna(채울 값, inplace = True)
🖐️파라미터
✅결측치를 채울 값 ex) df['컬럼명'].mean()/median() 등
✅inplace =

🔹결측치 제거

: 신중히 진행
🧷df.dropna() : 결측치 모두 삭제, 가장 많은 결측치를 가진 컬럼의 row를 기준으로 같은 행의 다른 데이터들도 다 삭제

profile
To be Data Analysist

0개의 댓글