Pandas 복습 노트 (1)

Tino-Kim·2022년 1월 10일
0
post-thumbnail

🥴 Pandas 복습 노트 (1)

  • import pandas as pd

📌 1번째 내용

  • Series
pd.Series([1,2,3,4])
  • DataFrame
  1. list를 이용해서 만들어주기.
    이런 경우는, indexcolumns를 이용해서 new name을 지어줄 수 있다.
  2. dictionary를 이용해서 만들어주기.
    dictionary를 통해서 new name을 지어줄 수 있다.
pd.DataFrame([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
pd.DataFrame({'첫번째':[1,2,3,4], '두번째':[5,6,7,8], '세번째':[9,10,11,12]})

😡 유의할 점: 칼럼명을 기준으로 값을 배열해준다. 밑의 그림을 참고하자~!

📌 2번째 내용

  • pd.read_csv( filename )
# 구글 드라이브에 있는 sample file 가져오기
from google.colab import drive
drive.mount('/content/drive')
filename='경로를 복사 -> 붙여넣기'
pd.read_csv(filename)

📌 3번째 내용

  • pd.read_excel( filename )
# 구글 드라이브에 있는 sample file 가져오기
from google.colab import drive
drive.mount('/content/drive')
filename='경로를 복사 -> 붙여넣기'
pd.read_excel(filename)

📌 4번째 내용

  • 기본 정보 알아보기.
df.coumns
df.index
df.info() # 결측치가 얼마나 있는지 알 수 있다
df.describe() # 대표적인 통계값을 알 수 있다
df.head() # 위에서 5개의 데이터를 볼 수 있다
df.tail() # 아래에서 5개의 데이터를 볼 수 있다
  • 원하는 방향으로 정렬하기.
    기본적으로는 오름차순이기 때문에, 내림차순으로 변경하고 싶으면 변경시켜주면 된다~!
df.sort_index() # 인덱스를 통한 정렬, 기본적으로 오름차순
df.sort_index(ascending=False) # 내림차순
df.sort_values(by='') # 어떤 칼럼을 기준으로 값을 정렬을 하는가?
df.sort_values(by='', ascending=False) # 내림차순

📌 5번째 내용

  • indexing과 slicing: loc과 iloc을 통해서 처리하기.
    fancy indexing과 boolean indexing이 있으니, 잘 이용하기~!
    💛 loc: 이름으로 indexing 또는 slicing하기.
    😡 주의할 점: index와는 다르게 끝까지 포함한다.
    💛 iloc: 위치, 즉 index로 indexing 또는 slicing하기. 인덱스 다룰 때와 동일하다.
    boolean indexing을 이용할 때에는 행에 조건을 넣어줘서 원하는 값을 가져오기.
df[df["키"]>180]
# 칼럼도 색인하고 싶은 경우에는 뒤에 붙여준다
df[df["키"]>180]['몸무게']
df.loc[df["키"]>180, '몸무게']
  • 결측치 다루기.
    ⭐ 결측치는 info를 통해서 몇 개가 어디에 있는지 알 수 있다.
my_condition=[원하는 값 채워넣기]
df["칼럼명"].isin(my_condition)
df["칼럼명"].isnull() # NaN 값을 가져오기
df["칼럼명"].notnull() # NaN 값이 아닌 값을 가져오기

📌 6번째 내용

  • row, column 추가하기.
    💛 row 추가하기: append와 dictionary 이용하기.
df=df.append({'이름': '테디', '그룹': '테디그룹', '소속사': '끝내주는소속사', 
'성별': '남자', '생년월일': '1970-01-01', '키': 195.0, 
'혈액형': 'O', '브랜드평판지수': 12345678}, ignore_index=True})

반드시 ignore_index=True를 삽입시키기.

  • row, column 추가하기.
    💛 column 추가하기: 새로운 컬럼을 만들고, 그 곳에 원하는 값들을 넣어주면 된다.
df["국적"] = '대한민국'
# 그 중에서 바꾸고 싶은 국적을 바꿔주기
df.loc[df["이름"]='유재석', '국적'] = '아프리카'
  • copy 이용해서 DataFrame 복사하기.
    copy를 해주지 않으면, 메모리 주소 값이 같기 때문에 변경시켜주면 그대로 원본 데이터가 망가져버린다.
df_copy=df.copy()
  • 통계값 다루기.
df.info() # 결측치의 개수를 알 수 있다
df.describe() # 기본적인 통계 정보에 대해 알 수 있다
df["키"].min() # 최소값
df["키"].max() # 최대값
df["키"].mean() # 평균
df["키"].sum() # 합계
df["키"].var() # 분산
df["키"].std() == np.sqrt(df["키"].var()) # 표준편차: 평균으로부터 얼마나 떨어짐?
df["키"].count() # 갯수
df["키"].median() # 중앙값
df["키"].mode() # 최빈값
  • Pivot-Table
# index는 행 인덱스
# columns는 열 인덱스
# values는 조회하고 싶은 값
# aggfunc에는 추가 계산 옵션 (np.sum, np.mean) - 기본값은 평균
pd.pivot_table(df, index, columns, values, aggfunc)
# 반드시 df는 까먹지 않고 넣어주기~!
  • GroupBy: 데이터를 그룹으로 묶어서 분석할 때 사용한다.
df.groupby('그룹으로 묶고 싶은 기준인 칼럼명').산술통계()
# 특정 열을 꺼내고 싶은 경우 > 특정 열 설정 후 산술통계 시키기
df.groupby('그룹으로 묶고 싶은 기준인 칼럼명')['칼럼명'].산술통계()
  • Multi-Index: ⭐ groupby와 연결되는 내용이다.
df.groupby(["칼럼명1", "칼럼명2"])
df.unstack("칼럼명1") # pivot_table로 변환하기
df=df.reset_index() # multi_index를 모두 풀어주기

📌 7번째 내용

  • fillna: NaN값에 값을 채우기.
  • dropna: NaN값이 있는 곳을 제거하기.
    how='any': 1개라도 NaN이면 제거한다.
    how='all': 모두 NaN이면 제거한다.
    axis=0: 행을 제거하기.
    axis=1: 열을 제거하기.
  • drop_duplicates: 중복되는 값이 있는 곳을 제거하기.
    keep='first': 처음 나온 부분을 유지하기.
    keep='last': 마지막에 나온 부분을 유지하기.
  • drop: 행 또는 열을 제거하기.
df.drop(["칼럼명1", "칼럼명2"], axis=1) # 열을 제거하기
df.drop(["인덱스1", "인덱스2"], axis=0) # 행을 제거하기

😡 유의할 점: 정렬하는 경우에는 axis=0인 경우는 위에서 아래로 정렬하는 것이지만, 제거하는 경우에는 axis=0은 행을 제거하는 것을 의미한다. 약간 차이가 있기 때문에, 2차원 배열인 경우에 축 설정할 때 주의하도록 하자~!

📌 8번째 내용

  • concat: 단순하게 이어붙이기.
    💛 row 기준으로 합치기.
    sort=False: 순서를 유지하면서 병합시키기.
    drop=True: 불필요한 인덱스를 제거시키기.
    💛 column 기준으로 합치기.
# 1. 행을 기준으로 합치기
pd_concat=pd.concat([df, df2], sort=False)
pd_concat.reset_index(drop=True)
# 2. 열을 기준으로 합치기
pd.concat([df, df2], axis=1)
  • merge: 어떤 고유한 값을 기준으로 병합하기.
    how='right': 오른쪽 데이터 프레임 기준으로 생각하기.
    how='left': 왼쪽 데이터 프레임 기준으로 생각하기.
    how='inner': 기준 칼럼의 교집합으로 생각하기.
    how='outer': 기준 칼럼의 합집합으로 생각하기.
pd.merge(left=df, right=df_right, on='기준이 되는 칼럼명', how)

cf. 성격은 같은데 이름이 다른 칼럼을 병합해야되는 경우
on 대신에 left_on과 right_on을 이용하기~!

df.merge([left, right, left_on, right_on, how])
# left_on과 right_on에는 성격이 같은데 이름이 다른 칼럼명을 적어주기

📌 9번째 내용

  1. Series Type 확인하기.
df.dtypes()
  1. Series Type 변경하기.
    💛 만약에 NaN값이 있는 경우, astype으로 값을 변경하는 것이 불가능하기 때문에 fillna로 값을 채워준 뒤에 astype을 이용해서 원하는 값의 형태로 변경시켜주기~!
1. df["칼럼명"].astype(int)
2. df["칼럼명"]=df["칼럼명"].fillna(np.mean(df["칼럼명"]))
df["칼럼명"].astype(int)
  1. Datetime 이용하기.
pd.to_datetime(df["칼럼명"])
df["칼럼명"].dt.year
df["칼럼명"].dt.month
df["칼럼명"].dt.day
df["칼럼명"].dt.hour
df["칼럼명"].dt.minute
df["칼럼명"].dt.second
df["칼럼명"].dt.dayofweek # 월요일부터 일요일까지 숫자로 나타내기
# 월요일은 0이고, 일요일은 6이다

📌 10번째 내용

  • apply: apply 쓰기 전에 반드시 함수를 정의해줘야 한다~! 이것은 새로운 칼럼을 명시해주는 경우에 유용하다.
  • lambda: 한 줄짜리 간단한 함수 식이다. 실제로는 간단한 계산식을 이용하는 경우에 많이 쓰인다.
  • map: dictionary+값을 매핑하기. 값을 다른 값으로 바꾸려고 할 때, 유용하다.

📌 11번째 내용

  • DataFrame의 산술연산
    Broadcasting의 개념을 잘 알고 있고, NaN값에는 어떤 짓을 해도 NaN임을 기억하기~!
axis=0 # 위와 아래라고 생각하면 된다
axis=1 # 좌우라고 생각하면 된다

📌 12번째 내용

  • df.select_dtypes(exclude or include 이용해서 포함 여부 결정하기)
num_cols = df.select_dtypes(exclude='object').columns
obj_cols = df.select_dtypes(include='object').columns

😡 문자열이 포함된 DataFrame의 연산으로 발생되는 Error를 피하기 위해서는...

df.select_dtypes(exclude='object')+10
  • one-hot-encoding
    우리는 4개의 별도의 column을 형성해주고 1개의 column에는 True 나머지는 모두 False를 넣어 줌으로써 A, B, AB, O형의 관계는 독립적이다를 표현해줍니다.
pd.get_dummies(df['혈액형_code'], prefix='혈액형')

😡 머신러닝에서 반드시 알아야되는 개념이고, 나중에는 꼭 이해해야 된다~!

😀 마무리...

pandas는 데이터 전처리 할 때, 굉장히 중요하기 때문에 잘 알아두고 한번에 다 외울 생각은 하지말되, 배운 것은 잘 써먹을 수 있도록 자주 package를 이용하기~!

profile
알고리즘과 데이터 과학과 웹 개발을 공부하는 대학생

0개의 댓글