파이썬으로 실제 데이터를 다룰 때는 데이터 프레임으로 작업해야 하는 경우가 많다
필자는 학생 시절 리스트같은 자료형을 다루는 방법으로만 주로 연습해서 익숙하지 않은 데이터프레임에 여러가지 조건을 걸어서 반복문을 돌려야 할 때 막히는 경우가 많았음.
데이터프레임 반복문을 사용하기 시작한거는 아직 세 달 미만인데 더 좋은 방법이 있다면 댓글로 공유바람!
이렇게 생긴 데이터로 실습해보겠다
1. 단순 반복을 쓸 경우
-> df 전체를 돌리는 경우는 컬럼 이름만 출력됨
-> 특정 시리즈를 선택해서 돌리는 경우는 값만 출력됨, 즉, 특정 행에 접근하기 어려움 & 두개 이상의 시리즈에 접근하기 어려움
그러니 이 방법으로는 원하는 방법에는 접근하기 어렵다 (컬럼 여러개에 조건 달기 등)
2. items(), iterrows()
-> iteritems 를 쓰는 경우, 첫번째 변수는 컬럼명, 두 번째 변수는 값으로 나온다.
-> iterrows 를 쓰는 경우, 첫 번째 변수는 인덱스, 두 번째 변수는 row 값 전체가 나온다
for i, j in df.iteritems():
print(i)
print('-------')
print(j)
for index, row in df.iterrows():
print('------------')
print(row)
3. 2번 변형
-> 2번 방법을 차용해.. 한 시리즈에서만 포문을 돌리고 싶다면 그냥 df 부분에 시리즈명을 지정해주면 된다. \
-> row 를 반복하는 iterrows 는 시리즈로 못 돌린다
for i, j in df['age'].iteritems():
print(i)
print('-------')
print(j)
-> 혹은 여러가지 컬럼을 지정해 주고 싶은 경우는 zip 을 이용해 컬럼을 감싸주면 된다
for age, point in zip(df['age'], df['point']):
print(age, point)
하지만 이 방법들을 복잡하게 쓴다면 (여기서 이제 조건을 걸고 이중 포문을 건다면) 매우매우 헷갈리기 시작할 것이다.. 그러다 찾은 좀 더 쉬운 방법은!!
필자 추천 !
조금 더 이지한 형식인 dict 를 이용하자..!
4. dict 역시 key 와 value 각각에 접근할때는 items 를 이용할 수 있다
dict_sample ={}
for row, val in df['age'].items():
if val: #공백이 아니면, 즉, 값이 존재한다면
dict_sample[val] = df['state'][row] #이 구조로 dict 를 만들거야
위 코드를 이용해 원하는 데이터 조건을 뽑은 dict 를 일단 만들자.
이런식으로 나올것이다
dict_sample
#{24: 'NY', 42: 'CA'}
이 dict 를 이용해서 원하는 조건을 걸거나 새로운 시리즈를 형성할 수 있다
이 예시는 point 시리즈 값을 변수로 삼은 함수인데, 딕셔너리의 첫 번째 값보다 point 값이 작으면, 새로운 시리즈인 pt_2 에 smaller를 입력해주는 것이다.
def how_much_point_do_you_have(pt) : #point 값들을 pt 변수로 취급
for p,q in dict_sample.items(): #딕셔너리의 key 와 val 에 대해서
if p < pt: #key 값이 pt 보다 작으면
return 'smaller'
df['pt_2'] = df['point'].apply(how_much_point_do_you_have) #함수 적용
"조건을 걸어서 새로운 데이터프레임을 형성해 낼 때!" 유용하게 쓴 방법이다
사실 이중 포문 쓰다 넘 헷갈려서 사용하기 시작한 방법인데,, 유용하게 쓰고 있다.. ㅎ
나중에 같은 작업 하게 될 때 내가 참고하기 위해 글 써 봤음
'Python > Case 정리' 카테고리의 다른 글
[case] 앱 로그 데이터로 유저의 접속 시간 계산하기 (0) | 2023.01.05 |
---|