냥냠
빅분기 실기 정리 - 1유형 본문
#한글이 섞인 데이터를 가져올 때는 encoding = "euckr"
emp20 = pd.read_csv("/content/emp20.csv", encoding="euckr")
# 1. dataframe 선언하기
dataset = np.array([['kor',70],['math',80]])
df = pd.DataFrame(dataset, columns=['class','score'])
df = pd.DataFrame([['kor',70], ['math', 80]], columns=['class','score'])
df = pd.DataFrame({'class':['kor','math'], 'score':[70, 80]})
# Series 선언하기
s = pd.Series({'idx 1':1, 'idx 2':2}, name='class')
#데이터 정보 확인
df.head()
df.tail()
df.info()
df.describe() # 수치형 데이터의 개수, 평균, 표준편차, 최솟값, 최댓값, 25%, 중앙값, 75% 제공
#데이터 결합
#단순연결
pd.concat([df1, df2], axis=0)
#join, merge
df.merge(df1, on = '교집합되는 칼럼이름', how = 'inner or outer or left or right')
#데이터 요약
df.groupby('그룹화할 기준열').FUN()
df.groupby(by='칼럼').median()
#도수분포표
pd.crosstab(df['c1'], df['c2'])
#포함 데이터
emp20[:][emp20["major"].isin(['컴퓨터공학과',"경영학과"])]
emp[['ename']] [ emp['ename'].apply(lambda x : x[0] == "A")]
emp[['ename']] [ ~ emp['ename'].apply( lambda x : x[-1] in ["K", "T"])]
#조건에 맞는 데이터 탐색
# &:AND , | : OR
df[df['이름'] == '이름']
df[df['name'] == '이름' & df['score'] >= 80]
#정렬 T : 오름차순
emp[ ['ename', 'sal'] ].sort_values( by ='sal', ascending=True)
result = emp20[ ['ename', 'age', 'telecom'] ] [ emp20['telecom'] != 'kt' ]
result.sort_values(by='age', ascending=False)
df[''].sort_values(by = 'd', ascending =False) #내림
#날짜형식 pd.to_datetime()
pd.to_datetime( emp['hiredate'])
emp[['ename','hiredate'] ] [ emp['hiredate'].between('1981-01-01','1981-12-31') ]
emp.hiredate.dt.year : 년도
emp.hiredate.dt.month : 달
emp.hiredate.dt.day : 일
df['date_added'].astype('datetime64[ns]') // yyyy-mm-dd
pd.to_datetime(df['date_added'] //yyyy-mm-dd
#날짜 데이터 핸들링
from datetime import datetime
datetime.today()
datetime.today().year # month, day, hour
#날짜 형식으로 변환하기
df['dt'] = pd.to_datetime(df['dt'], format="%Y-%m-%d %H:%M:%S")
datetime.strptime('날짜 문자열', '포맷')
result = df['StartTime'].dt.date.value_counts().index[0] #날짜최빈값
#중복제거 unique()는 시리즈 함수 - 대괄호 1개
emp['job'].unique()
emp['job'] [ emp['deptno']==20 ].unique()
#대소문자
emp20['telecom'].str.upper()
emp.ename.str.lower()
emp.ename.str.capitalize()
pd.concat( [emp.ename.str.lower(), emp.sal ], axis=1 )
#문자열 자르기
emp.ename.str.slice( start=0, stop=2) # 0,1
#슬라이싱
s=[1,2,3,4,5]
s[1:5] #[2,3,4,5]
s[:-2] #[1,2,3]
df.iloc[row,column] # 행(=줄), 열
df.loc[row, cloumn] # end를 포함
df.iloc[1:4] == df.loc[1:3]
df.iloc[:10,7] = df['f5'][:10].min() # 7번째 칼럼을 10번째 줄,
#row 추가
df = df.append(추가할 내용)
#column 추가
df['추가칼럼'] = 1 #단일값
df['추가칼럼'] = [ a,a,a,a]
df['총점'] = df['A'] + df['D']
emp['ename_len'] = emp.ename.str.len() #문자길이
#row/column 삭제
df.drop('행 이름', inplace = True)
df.drop(columns['a', 'b'], inplace = True)
#문자열 찾기 find
emp.ename.str.find('M') #해당 인덱스 출력, 없으면 -1
#문자열 포함 contains
df[''].str.contains('문자')
#문자열 대체 replace
a = 'scott'
a.replace('s', 'k') # kcott
df.dtypes #타입 확인
emp['sal'] = emp['sal'].astype(str) #타입 변환 astype() "str" "int"..
emp['sal_replace']=emp.sal.str.replace('0','*')
#re는 전처리기 import re
emp['sal_star'] = emp.sal.apply( lambda x : re.sub( '[0-3]', '*', x ) ) # 0~3 -> *
함수 설명
lstrip() 문자열에서 존재하는 왼쪽 공백을 제거
rstrip() 문자열에서 존재하는 오른쪽 공백을 제거
strip() 문자열에서 존재하는 양쪽 공백을 제거
emp['sal'].max()
emp['sal'].min()
emp['sal'].sum()
emp['sal'].mean()
emp['sal'].count()
emp['sal'].mode()[0] #최빈값
emp['sal'].var() #분산
emp['sal'].std()#표준편차
emp['sal'].skew() #왜도
emp['sal'].kurt()#첨도
np.std(emp['sal']) #표준편차
round(np.std(df['col2']), 3) # 반올림
#이상치 IQR
Q25 = df['orbital_preiod'].quantile(0.25)
Q75 = df['orbital_preiod'].quantile(0.75)
IQR = Q75 - Q25
min = Q25 - IQR*1.5
max = Q75 +IQR*1.5
sum((df['age'] < min) | (df['age'] > max))
#결측값 탐색
#isna(), isnull() => 결측값 True로 반환
#notna(), notnull() => 결측값 False로 반환
df.isna()
df.isna().sum() #열의 합계
df.isna().sum(1) #행의 합계
#결측값 제거 df.dropna(axis=0) 0이면 행을 삭제 1이면 열을 삭제
df.dropna() #결측값이 포함된 모든 행을 삭제
df.dropna(thresh=4) #결측값이 아닌 값이 4개 이상인 행만 남기기
#결측값 대체
df.fillna(df.mean()) #평균값으로 채우기
df['a'].fillna(df['a'].mean())
df.fillna(method='pad') #직전값으로 대체 'backfill'은 다음값으로 대체
#중복행 삭제
df.drop_duplicates()
#이름과 나이와 등급을 출력하는데 나이를 5등급으로 나눠서 등급을 출력
emp20['순위'] = emp20['age'].rank(method='dense', ascending=False).astype(int)
cuts = 5
emp20['age_grade'] = pd.qcut( emp20.순위, q=cuts, labels=range(1, cuts+1) )
df['age_grade'] = pd.qcut( df.순위, q=4, labels=[ 1, 2, 3, 4 ] )