Language/Python

231120 Python_isin(), 같다, 같지않다, or(|), and(&), null(결측치)

잇꼬 2023. 11. 20. 19:54
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