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")
한글 들어있는 거 안 깨지게 저장하려면 인코딩해서 저장하기!
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()
까지 해줘야 나타남.
p_xgb = np.where(p_xgb == 0, -1, p_xgb)
값 바꾸기
nparray = df.to_numpy()
데이터프레임을 넘파이 어레이로 바꾸기
df = pd.DataFrame(nparray)
넘파이 어레이 데이터프레임으로 바꾸기, 혹은 넣고싶은 데이터프레임에 새로운 칼럼 만들어서 넣어줘도 됨(df['newcolumn'] = nparray)
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['칼럼명'])
날짜 형식으로 변환
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... 등의 칼럼이 생김