-
엑셀의 필터기능을 파이썬에서_(1) 일괄 값 입력파이썬, Python/엑셀 대신 파이썬! 2023. 6. 21. 00:07728x90
파이썬을 쓰기가 꺼려지는 이유중에 하나가
엑셀의 가장 강력한 무기인, 눈으로 보면서 직접 필터링 하는 기능.
그리고 그 필터링한 값을 일괄로 변경하는 기능 때문이 아닐까 생각된다.
이 작업을 파이썬에서 어떻게 간단하게 수행할 수 있는지 알아보자.파이썬에서 엑셀처럼 대용량 데이터의 가공 및 필터링을 위해서는,
판다스를 아주 살짝 알고 있어야 한다.
1) 엑셀의 필터기능 : 두가지 방법이 있고, 편한대로 하면 된다
import pandas as pd df = pd.read_csv('ddd.csv', dtype='object') # 1) 이중 df 처리 condition_1 = df['컬럼1'] == '1' df[condition_1]
이를 한줄로 간단하게 표현하면 아래와 같이 줄일 수 있고,
df의 컬럼1이 '1'인 row만 필터링 한다.
df[df['컬럼1']=='1']
만약 loc를 쓰는 방법도 있다.
df.loc[df['컬럼'1]=='1']
개인적으로는 첫번째 방법이 더 익숙하다.
2) 필터한 값을 임의의 값으로 일괄 입력하기
위 방법을 기반으로 수행할 수 있는데 아주 간단하다.
기본적으로, 어떤 값에 변수를 입력하는 방법은? ( a = 1 )
그렇다면, 위 필터링한것과 함께 응용하면 된다.
# 첫번째 방법 응용 df[df['컬럼1']==1]['status'] = 'active' # 두번째 방법(loc) 응용 df.loc[df['컬럼1']==1, 'status'] = 'active'
3) 복잡한 조건을 걸고, 조건에 맞을 경우 값을 변경하기
두가지 방법이 쓰인데, apply, loc
이쯤되면, loc는 살짝 만능의 냄새가 난다. 동시에, loc만 제대로 알아도 모든 엑셀의 필터 기능을 대체할 수 있다는 의미일 수 도 있다.
# 1) apply & lambda 사용하기 df['shift'] = df['desc'].apply(lambda x : 'NIGHT' if '야간' in x else 'DAY') # 2-1) loc 사용하기 df.loc[df['desc'].str.contains('야간'), 'shift'] = 'NIGHT' df.loc[~df['desc'].str.contains('야간'), 'shift'] = 'DAY' # 2-2) loc 내 조건을 사전 정의 cond = df['desc'].str.contains('야간') df.loc[cond,'shift'] = 'NIGHT' df.loc[~cond, 'shift'] = 'DAY'
loc를 쓰면 먼가. 두줄로 써지고 apply & lambda를 사용하는 것 보다 덜 간지나 보인다.
하지만, 속도는 loc가 빠르다.
단, 데이터의 양이 그리 많지 않다면 apply & lambda를 사용하는 것도 나쁘지 않다.
반응형'파이썬, Python > 엑셀 대신 파이썬!' 카테고리의 다른 글
맨앞의 컬럼을 제외한 나머지 컬럼의 데이터 타입을 바꾸자! (0) 2023.06.21 RangeIndex ?? (0) 2023.06.21 가로축과 세로축을 한번에 바꾸고 싶을 경우(행,열을 서로 바꾸기) (0) 2023.06.21 여러개 파일을 하나로 병합하기! (0) 2023.06.20 엑셀에서 수식오류로 #NAME? 이 된 셀을 파이썬에서 처리하는 방법? (0) 2023.06.20