-
[파이썬] 데이터프레임에서 조건에 맞는 값 변경하는 두 가지 방법파이썬 배우기 2023. 11. 20. 17:14
데이터프레임에서 수정하고 싶은, 조건에 맞는 값을 변경하는 두 가지 방법에 대해 소개하겠습니다.
- 첫 번째 방법은 데이터프레임의 인덱스와 컬럼 값을 이용하여 값을 바꾸는 방법이고
- 두 번째 방법은 at 과 iterrows() 함수를 이용하는 방법입니다.
두 번째 방법이 더 복잡한데, 그럼에도 불구하고 at을 쓰는 이유는 인덱싱에서 빠른 작업 속도를 갖기 때문입니다. 임의의 데이터프레임을 만들어서 예제를 보여드려 소요시간에 차이는 없지만 혹시 궁금하신 분은 아래 코드를 이용해서 확인해보시면 좋을 것 같습니다.
# 수행코드 맨 윗줄에 삽입 start = time.time() # 수행코드 맨 아랫줄에 삽입 print("소요시간 : %.3f초" %(time.time()-start))
우선, 예제 데이터프레임을 만듭니다. 그리고 각 과목에서 0미만안 점수를 0으로, 100 초과인 점수를 100으로 바꾸려고 합니다.
score = pd.DataFrame({"name":['Kim','Lee','Park'], "kor":[-46,102,95], "math":[95,105,80], "eng":[107,85,50] }) score.set_index('name',inplace=True)
kor math eng name Kim -46 95 107 Lee 102 105 85 Park 95 80 50
1. df[컬럼][인덱스]
for subject in score.columns: #score.columns : ['kor', 'math', 'eng'] for student in score.index: #score.index : ['Kim', 'Lee', 'Park'] if score[subject][student] < 0 : score[subject][student] = 0 elif score[subject][student] > 100 : score[subject][student] = 100 score
2. iterrows()와 at 사용하기
for student, subject_score in score.iterrows(): for subject in score.columns: if subject_score[subject] < 0 : score.at[student, subject] = 0 elif subject_score[subject] > 100 : score.at[student, subject] = 100 score
참고로 iterrows() 함수는 이름에서 유추할 수 있듯, 데이터프레임에서 (index, Series) 형태로 행을 반복하는 것입니다.
- Docstring : Iterate over DataFrame rows as (index, Series) pairs.
실제 생긴 형태를 살펴보면
for temp in score.iterrows(): print(temp) # Result ('Kim', kor 0 math 95 eng 100 Name: Kim, dtype: int64) ('Lee', kor 100 math 100 eng 85 Name: Lee, dtype: int64) ('Park', kor 95 math 80 eng 50 Name: Park, dtype: int64)
(Index, Series) 형태를 더 자세히 살펴보려면,
for temp in score.iterrows(): print(temp[0]) # Index print("-------------") print(temp[1]) #Series print("=============") # Result Kim ------------- kor 0 math 95 eng 100 Name: Kim, dtype: int64 ============= Lee ------------- kor 100 math 100 eng 85 Name: Lee, dtype: int64 ============= Park ------------- kor 95 math 80 eng 50 Name: Park, dtype: int64 =============
'파이썬 배우기' 카테고리의 다른 글
[파이썬] matplotlib으로 다중 꺾은선 그래프 그리기 (1) 2023.11.21 [파이썬] 데이터프레임 합치는 3가지 방법 (1) 2023.11.21 [파이썬] dict에서 없는 키값 처리하는 get() 함수 (0) 2023.11.20 [파이썬] zip 함수로 리스트 짝지어주기 (0) 2023.11.16 [파이썬] enumerate로 자동으로 인덱싱하기 (0) 2023.11.16