[파이썬] 판다스 시작하기

serotonins·2022년 9월 17일
0

Develop

목록 보기
5/17

# 소환

import pandas as pd

# 데이터 읽기

변수1="URL이나 경로"
변수2=pd.read_csv(변수1) 변수2에 dataframe 형태로 입력

# 함수들

df = pd.DataFrame() 빈 데이터프레임 만들기
변수2.head(몇개보여줄지숫자) 처음부터 숫자만큼의 데이터 행 출력
변수2.tail(몇개보여줄지숫자) 마지막부터 숫자만큼의 데이터 행 출력
변수2.shape 가져온 데이터의 행과 열 개수
변수2.columns 각 칼럼명
변수2.dtypes 각 칼럼의 데이터 타입
변수2.info() 각 칼럼의 이름, 데이터 타입, count 값 등
변수2.describe() 칼럼 별 기초 통계량(count, mean, max, min 등)
변수2.sort_values(by= '기준칼럼', ascending= False) 기준 칼럼을 기준으로 전체 행 내림차순(ascending= true거나 생략시 오름차순) 정렬
df.loc[어쩌구저쩌구조건].index 해당 행의 인덱스 출력하기, 여러 행이 걸리면 리스트로 여러 행의 인덱스를 모두 알려준다
변수2['칼럼'].value_counts() 칼럼 안의 변수 별 개수
변수2.loc[ 행, 칼럼] 행과 칼럼은 범위인 숫자 및 슬라이싱( : 앞 뒤로 뭐 없으면 전부)이나 이름(여러개일 땐 [] 리스트로), 조건으로 적을 수 있음 -index 문법
변수2.iloc[ 행, 칼럼] 위와 같음 -python 문법
변수2['칼럼명'].unique() 변수 종류와 데이터 타입
변수2['칼럼명'].between(여기부터, 여기 직전)
변수2.drop(['제거할칼럼1', '제거할칼럼2', '제거할칼럼3'], axis=1, inplace=True) 칼럼들을 삭제(inplace=False면 하는 시늉)
df.loc[df['컬럼'].str.contains('이문자열을포함하는지', case=False)] 해당 컬럼에서 특정 문자열을 포함하는 행만 출력, case=True가 디폴트인데 False해주면 대소문자 구분 안 함
변수2['칼럼명'].map({'바뀌기전변수': '바꾼후변수', '바뀌기전변수': '바꾼후변수'}) 칼럼의 변수들 이름 바꾸기
변수2.loc[변수2['칼럼명']=='바뀌기전변수', '칼럼명']='바꾼후변수' 위와 똑같은 행위
df.replace({'변수1': '바꾼후변수1', '변수2': '바꾼후변수2}, inplace=True) 똑같은 행위 2
변수2.groupby('이칼럼의변수별로', as_index=False)['이칼럼의정보정리'].mean() 괄호안의 칼럼별로 []칼럼의 평균이나 다른 정보 구할 때
변수2.groupby(['아킬럼별로1', '이칼럼별로2'], as_index=False)['이칼럼의정보정리'].agg('mean', 'min', 'max') 여러 정보 한번에 구하기
df['새로만들칼럼명']= pd.cut(df['컬럼'], bins=[0, 9, 19, 29, 40], labels=['A', 'B', 'C', 'D']) 수치형 데이터 범주화(A: 0~9, B:10~19, ...)
df.drop_duplicates(inplace=True) 모든 열이 중복되는 행 제거, 특정 칼럼만 중복되어도 제거되게 하려면 ['컬럼1', '컬럼2']를 괄호 안에 넣어주자
df.loc[:, ~df.columns.duplicated()] 모든 행이 중복되는 열 제거
df.T.drop_duplicates().T 컬럼 이름만 다르고 모든 행이 중복되는 열 제거

data = { 
    '첫번째컬럼이름':range(2441),
    '두번째컬럼이름':내용물
}
df = pd.DataFrame(data) ## 데이터프래임 생성
df.to_csv('생성될csv파일이름.csv',index=False)

csv 파일로 만들기
df.astype('float') 타입바꾸기, 'object', 'int'
df.to_csv("df.csv", index=False, encoding="utf-8-sig") 한글 들어있는 거 안 깨지게 저장하려면 인코딩해서 저장하기!

# df 수정하기

! 변수2가 df(dataframe)의 이름이라는 거 알아두기

pd.merge(dataFrame1, dataFrame2, how=기준으로잡을데이터프레임, on='칼럼명') 두 데이터 프레임을 기준으로 잡을 데이터프레임(left, right, inner, outer)을 위주로 해당 칼럼을 병합, on의 칼럼을 기준으로 정렬, how와 on 생략하면 inner와 칼럼 전부가 디폴트
pd.concat([df1, df2], axis=1) 좌우로 붙이기, axis 생략 or 0이면 위아래로 붙이기
df.rename(columns = {'바꾸기전1':'바꾼후1','전2':'후2'},inplace=True) 컬럼 이름 바꾸기
df.loc[i+d/100] = df.loc[i] for문 이용, 인덱스에 소수점 붙여서 바로 뒤에 붙여넣기(복제), df = df.sort_index()도 한번 해줘야 함
변수2['칼럼명'].rolling(숫자1, min_periods=숫자2) 숫자1만큼 기준일 포함(그 기간동안) 칼럼의 변수들을 언급, 숫자2만큼의 데이터는 있어야 결과 NaN으로 안 나옴, min_periods 생략도 가능, 뒤에 .mean()같은 거 하나는 붙어있어야 함
변수2['칼럼명'].shift(숫자) 숫자만큼 칼럼을 뒷행쪽으로 땡김
df['집어넣을칼럼']=df['칼럼명'].diff(숫자) 해당 칼럼에서 해당 행의 데이터 - 그 행보다 숫자만큼 앞선 행의데이터
pd.crosstab(변수2['행이될칼럼'], 변수2['열이될칼럼'], nomalize='옵션') 행이 될 칼럼이 진짜 행이 되고 열이 될 칼럼이 열이 되는 데이터프레임을 만듬, 옵션은 columns(열 기준), index(행 기준), all(전체 기준)으로 정규화
df.pivot(index, columns, values) index가 행 columns가 열 values가 내용인 데이터프레임 생성
sns.heatmap(b, annot=True) a=groupby->b=a.pivot->heatmap 순으로 있어야함. 색이 연할수록 높은 수를 가지는 등고선같은 맵을 만들어줌. annot은 숫자를 표시할지 묻는 옵션 plt.show()까지 해줘야 나타남.

# np 꼽사리

p_xgb = np.where(p_xgb == 0, -1, p_xgb) 값 바꾸기
nparray = df.to_numpy() 데이터프레임을 넘파이 어레이로 바꾸기
df = pd.DataFrame(nparray) 넘파이 어레이 데이터프레임으로 바꾸기, 혹은 넣고싶은 데이터프레임에 새로운 칼럼 만들어서 넣어줘도 됨(df['newcolumn'] = nparray)

# 날짜 타입 변수로부터 날짜 요소 뽑는 dt 메서드들

df['칼럼명'].dt.날짜요소 날짜 요소들-숫자-(date-문자-, year, month, month_name()-문자-, day, weekday, day_name()-문, 요일 이름-, time-문-, hour, minute, second, quarter, days_in_month)
df['기준일ID'] = pd.to_datetime(df['기준일ID'], format='%Y%m%d') 20200101 이렇게 써진 컬럼을 데이터프레임 형식(2020-01-01 00:00:00)으로 바꿔주는
pd.to_datetime(df['칼럼명']) 날짜 형식으로 변환

# NaN 처리 함수들

df.isnull(), df.isna() df에서 NaN 값을 True, 아니면 False로 표시
df.isna().any(), df.isna().sum()칼럼별로 NaN이 존재하는지, 칼럼별로 NaN이 몇갠지
df.dropna(axis=0) axis=0이면 NaN이 들어있는 행 제거, 1이면 열 제거
df.fillna(method='옵션') NaN 대신에 채우는 함수, () 안에 숫자를 넣을 수도 있고 method 옵션으로는 ffill(이전 데이터로 채우기), bfill(뒤 데이터로)
df['컬럼명'] = fillna(df['컬럼명'].value_counts().idxmax(), inplace=True) 최빈값으로 채우기
df.interpolate(method='옵션') 앞뒤값의 중간 값으로 채우기
df.where(pd.notnull(df), df.mean(), axis='columns') 컬럼별 평균값으로 채우는 방법

# 가변수화

더미이름= pd.get_dummies(df['칼럼'], prefix='접두사', drop_first=True) 접두사_02, 접두사_03... 등의 칼럼이 생김

0개의 댓글