-
Pandas - 조건에 맞는 컬럼 값 여러개 바꾸기프로그래밍 언어/Python 2020. 12. 24. 10:14
컬럼값을 바꿀 때, for 문으로 바꾸려고 하시는분들이 꽤 계실 것이다.
필자 또한 처음에 for문으로 일일이 바꾸어주었는데, 다른 프로그래밍 언어라면 그렇게 하겠지만,
파이썬은 진짜 웬만하면 다 만들어놓은게 많다.
(그리고 만들어진 라이브러리들은 C++같은 저레벨언어로 만들어졌기 때문에 실행시간이 훨씬 빠르다.)
판다스를 사용한다 -> 판다스 객체에서 무엇인가 하고싶다 -> 판다스에서 제공할 것이다
이러한 흐름대로 의식을 진행시킨다면, 저처럼 개고생하는 일은 없으실 것이다.
이 포스팅에서는, 아래의 내용을 다룰 것이다.
# Pandas 에서 조건에 맞는 컬럼에서 단일값 바꾸기
# Pandas 에서 조건에 맞는 컬럼에서 여러값 바꾸기
# Pandas 에서 조건에 맞는 컬럼에서 단일값 바꾸기
# 예시 데이터셋
dest_loc 컬럼에서 4행의 '대명동'을 '홍대'로 바꾸는 법은 아래와 같다.
## 예시 데이터셋 호출 df = pd.read_csv("~~~~") ## 단일값 바꾸는 부분 # 1. Index 기반 접근방법 df.at[4,'dest_loc'] = '홍대' # 4행, 'dest_loc'칼럼 값을 홍대로 변경 # 2. True/False 기반 접근 방법 df[(df['dest_loc'] == '대명동')] = '홍대' # 'dest_loc'칼럼 中 '대명동'과 일치하는 데이터 # '홍대'로 일괄변경(만족하는 값이 하나일경우 단일값 변경)
# Pandas 에서 조건에 맞는 컬럼에서 여러값 바꾸기
# 예시 데이터셋
이번에는,
dest_loc과 boarding_loc에 괄호<(,)> 를 포함한 값을 모두
괄호안의 값으로 변경하는 법이다.
# 아래 코드는 추천하지 않는 형식의 코드(For문)이다
(제가 삽질했던 코드이다.. ㅠㅠㅠ)
240만건 기준 대충 10분(수행시간)은 걸렸던것 같다...
# 1. True/False 기반 For 문 접근 방법 (비추천) # 주의 : 이런 짓 제발 하지말자 # 연산속도 엄청느림 + CopyWarning 발생 (되긴함) df['dest_loc']=df['dest_loc'].fillna('None') # cleaning dest_loc idx= 0 for loc in df['dest_loc'] : if (loc.find('(') != -1) : clean_addr = loc.split('(')[1].replace(')',"") df['dest_loc'][idx]=clean_addr idx += 1
# 아래는 판다스에서 제공하는 apply 메소드를 이용한 매우 강추하는 방법이다
(연산속도가 말도안되게 빠르다...)
240만건 기준 1분(수행속도)도 안걸린것 같다... ㅠㅠ
공백까지 지우려면 위의 방법으로는 연산속도가 더 증가하게되는데,
apply로 아주 간단히... 가능하다 ㅠㅠ
# 2. Pandas apply 메소드 기반 접근방법 (강추!) # 연산속도 엄청빠름 def cleaning(x) : if str(x).find("(") != -1 : return str(x).split("(")[1].replace(")","") return str(x) # apply메소드의 lambda 함수는 공백까지 지우기 위해 사용한 코드입니다. # 이렇게 중복으로도 사용가능하다는걸 알려드리고 싶었네요 ㅎ.ㅎ # boarding_loc cleaning df['boarding_loc']=df['boarding_loc'].fillna("NONE") df['boarding_loc']=df['boarding_loc'].apply(cleaning).apply(lambda x:x.replace(" ","")) # dest_loc cleaning df['dest_loc']=df['dest_loc'].fillna("NONE") df['dest_loc']=df['dest_loc'].apply(cleaning).apply(lambda x:x.replace(" ",""))
728x90'프로그래밍 언어 > Python' 카테고리의 다른 글