카테고리 없음

빅분기 실기 정리 - 1유형

sueeee-e 2024. 11. 19. 10:29
#한글이 섞인 데이터를 가져올 때는 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 ] )