728x90
반응형
SMALL
from pandas import Series, DataFrame
import pandas as pd
emp = pd.read_csv('c:/data/employees.csv')
emp.info()
# SQL
SELECT * FROM WHERE employee_id = 100 OR employee_id = 101;
SELECT * FROM WHERE employee_id in (100, 101);
emp['EMPLOYEE_ID'] == 100
emp['EMPLOYEE_ID'] == 101
emp[emp['EMPLOYEE_ID'] == 100]
emp[emp['EMPLOYEE_ID'] == 101]
# pandas -> or, and 사용X -> |, & 변경
True or True
True or False
True | True
True | False
True and True
True and False
True & True
True & False
# 오류발생, bool 타입에서는 or 사용X, () 사용
(emp['EMPLOYEE_ID'] == 100) or (emp['EMPLOYEE_ID'] == 101)
emp['EMPLOYEE_ID'] == 100 | emp['EMPLOYEE_ID'] == 101
# 해결방안
(emp['EMPLOYEE_ID'] == 100) | (emp['EMPLOYEE_ID'] == 101)
# 같다
SELECT * FROM WHERE employee_id = 100 OR employee_id = 101;
emp[(emp['EMPLOYEE_ID'] == 100) | (emp['EMPLOYEE_ID'] == 101)]
# isin() : SQL in 연산자와 동일한 의미( == | == )
SELECT * FROM WHERE employee_id in (100, 101);
emp[emp['EMPLOYEE_ID'].isin([100, 101])]
# 같지 않다
SELECT * FROM WHERE employee_id != 100 AND employee_id != 101;
emp[(emp['EMPLOYEE_ID'] != 100) & (emp['EMPLOYEE_ID'] != 101)]
# ~ isin() : SQL not in 연산자와 동일한 의미( != & != )
# ~ : not 의미
SELECT * FROM WHERE employee_id not in (100, 101);
~emp['EMPLOYEE_ID'].isin([100, 101])
emp[~emp['EMPLOYEE_ID'].isin([100, 101])]
~True # 실행 값 : -2
~False # 실행 값 : -1
<<<연습>>>
emp['JOB_ID'] == 'AD_VP'
emp['JOB_ID'] == 'AD_PRES'
(emp['JOB_ID'] == 'AD_VP') | (emp['JOB_ID'] == 'AD_PRES')
emp[(emp['JOB_ID'] == 'AD_VP') | (emp['JOB_ID'] == 'AD_PRES')] # 인덱싱
# 오류발생
emp[(emp['JOB_ID'] == 'AD_VP') | (emp['JOB_ID'] == 'AD_PRES')]['LAST_NAME', 'SALARY', ' JOB_ID']
# 같다
emp[(emp['JOB_ID'] == 'AD_VP') | (emp['JOB_ID'] == 'AD_PRES')][['LAST_NAME', 'SALARY', 'JOB_ID']]
emp.loc[(emp['JOB_ID'] == 'AD_VP') | (emp['JOB_ID'] == 'AD_PRES'),['LAST_NAME', 'SALARY', 'JOB_ID']]
emp.loc[emp['JOB_ID'].isin(['AD_VP', 'AD_PRES']),['LAST_NAME', 'SALARY', 'JOB_ID']]
# 같지 않다
emp[(emp['JOB_ID'] != 'AD_VP') & (emp['JOB_ID'] != 'AD_PRES')][['LAST_NAME', 'SALARY', 'JOB_ID']]
emp.loc[(emp['JOB_ID'] != 'AD_VP') & (emp['JOB_ID'] != 'AD_PRES'),['LAST_NAME', 'SALARY', 'JOB_ID']]
emp.loc[~emp['JOB_ID'].isin(['AD_VP', 'AD_PRES']),['LAST_NAME', 'SALARY', 'JOB_ID']]
# ■ null, 결측치(값)
from pandas import Series, DataFrame
import pandas as pd
import numpy as np
from numpy import nan as NA
# Series 생성
s1 = Series([1,2,3,None,5])
s2 = Series([1,2,3,np.NaN,5])
s3 = Series([1,2,3,np.nan,5])
s4 = Series([1,2,3,NA,5])
NaN 체크 | isnull() | pd.isnull(변수명) |
NaN 아닌 체크 | notnull() | pd.notnull(변수명) |
# NaN 체크(isnull(), pd.isnull(변수명))
s1.isnull()
s2.isnull()
s3.isnull()
s4.isnull()
pd.isnull(s1)
# NaN 아닌 체크(notnull(), pd.notnull(변수명))
s1.notnull()
s2.notnull()
s3.notnull()
s4.notnull()
pd.notnull(s1)
# 결측치 출력
s1[s1.isnull()]
s1[s1.notnull()]
NaN 채우는 방법 | 변수명.fillna('채울값') |
NaN 앞의 값으로 채우기 | 변수명.fillna(method='ffill') 변수명.fillna(method='pad') |
NaN 뒤의 값으로 채우기 | 변수명.fillna(method='bfill') 변수명.fillna(method='backfill') |
NaN 결측치 제거 | 변수명.dropna() |
# NaN 채우는 방법(미리보기)
s1.fillna(0)
s1 = s1.fillna(0) # 결측값을 다른 값으로 채우는 방법(적용)
# 앞의 있는 값으로 채운다
s2.fillna(method='ffill')
s2.fillna(method='pad')
# 뒤의 있는 값으로 채운다
s2.fillna(method='bfill')
s2.fillna(method='bakcfill')
# NaN 결측치 제거
s3.dropna() # 미리보기
s3 = s3.dropna() # 적용
s3
# DataFrame 생성
df = DataFrame(data =[[1,2,3],
[1, None, np.NaN],
[np.nan, NA, NA],
[NA, 2, 3]],
columns=['a', 'b', 'c'])
df
# 결측치 다른 값으로 변경(미리보기)
df.fillna(0)
df
# 특정한 값만 다른 값으로 변경
df['a'].fillna(0)
df['b'].fillna(10)
df['c'].fillna(100)
df.fillna({'a':10, 'b':20, 'c':30}) # 각각 value 값 지정
# 결측값 제거
df
df.dropna() # NaN이 하나라도 있으면 그 행은 삭제(기본값), 미리보기
df.dropna(how='any', axis=0) # NaN이 하나라도 있으면 그 행은 삭제(기본값), 미리보기
df.dropna(how='all', axis=0) # NaN이 전부 있는 행만 삭제
df
df.dropna(how='any', axis=1) # NaN이 하나라도 있으면 그 열은 삭제, 미리보기
df.dropna(how='all', axis=1) # NaN이 전부 있는 열만 삭제
df['d'] = None # 결측값 추가
df
df.dropna(how='all', axis=1) # NaN이 전부 있는 열만 삭제
# 재생성
df = DataFrame(data =[[1,2,3],
[None, np.NaN, 4],
[2, 3, NA],
[2, NA, 3]],
columns=['a', 'b', 'c'])
df.fillna(0)
# 분석시 사용
df.fillna(method='ffill')
df.fillna(method='pad')
df.fillna(method='bfill')
df.fillna(method='backfill')
df
# 테이블에 적용, isnull()
emp[emp['COMMISSION_PCT'].isnull()][['EMPLOYEE_ID', 'COMMISSION_PCT']]
emp.loc[emp['COMMISSION_PCT'].isnull(),['EMPLOYEE_ID', 'COMMISSION_PCT']]
# 테이블에 적용, notnull()
emp[emp['COMMISSION_PCT'].notnull()][['EMPLOYEE_ID', 'COMMISSION_PCT']]
emp.loc[emp['COMMISSION_PCT'].notnull(),['EMPLOYEE_ID', 'COMMISSION_PCT']]
728x90
반응형
LIST