- Series
pd.Series([1,2,3,4])
- DataFrame
- list를 이용해서 만들어주기.
이런 경우는, index나 columns를 이용해서 new name을 지어줄 수 있다.- 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]})
😡 유의할 점: 칼럼명을 기준으로 값을 배열해준다. 밑의 그림을 참고하자~!
- pd.read_csv( filename )
# 구글 드라이브에 있는 sample file 가져오기 from google.colab import drive drive.mount('/content/drive') filename='경로를 복사 -> 붙여넣기' pd.read_csv(filename)
- pd.read_excel( filename )
# 구글 드라이브에 있는 sample file 가져오기 from google.colab import drive drive.mount('/content/drive') filename='경로를 복사 -> 붙여넣기' pd.read_excel(filename)
- 기본 정보 알아보기.
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) # 내림차순
- 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 값이 아닌 값을 가져오기
- 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를 모두 풀어주기
- 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차원 배열인 경우에 축 설정할 때 주의하도록 하자~!
- 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에는 성격이 같은데 이름이 다른 칼럼명을 적어주기
- Series Type 확인하기.
df.dtypes()
- Series Type 변경하기.
💛 만약에 NaN값이 있는 경우, astype으로 값을 변경하는 것이 불가능하기 때문에 fillna로 값을 채워준 뒤에 astype을 이용해서 원하는 값의 형태로 변경시켜주기~!1. df["칼럼명"].astype(int) 2. df["칼럼명"]=df["칼럼명"].fillna(np.mean(df["칼럼명"])) df["칼럼명"].astype(int)
- 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이다
- apply: apply 쓰기 전에 반드시 함수를 정의해줘야 한다~! 이것은 새로운 칼럼을 명시해주는 경우에 유용하다.
- lambda: 한 줄짜리 간단한 함수 식이다. 실제로는 간단한 계산식을 이용하는 경우에 많이 쓰인다.
- map: dictionary+값을 매핑하기. 값을 다른 값으로 바꾸려고 할 때, 유용하다.
- DataFrame의 산술연산
Broadcasting의 개념을 잘 알고 있고, NaN값에는 어떤 짓을 해도 NaN임을 기억하기~!axis=0 # 위와 아래라고 생각하면 된다 axis=1 # 좌우라고 생각하면 된다
- 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를 이용하기~!