pandas - 데이터 프레임 조작하기

Zero·2022년 8월 12일
1

python

목록 보기
6/6
post-thumbnail

프로젝트를 진행하다,
잊고싶지 않아 이곳에 기록해둔다.

1. 문제

kaggle에 올라온 데이터프레임을 전처리하다,
데이터프레임에 담긴 list가 String으로 저장되어있는 문제를 마주했다.

"['make a choice and proceed with recipe', 'dep..."

팀원분이 해결하다가 안돼서 나한테 도움을 요청한 것이었다.

이게 왜 문제냐?

recipe['steps'][0][0]

위의 코드를 찍으면 한 문장이 찍히는 것이 아니라,

"[", "'", "m"

위와 같이 문자열 하나하나가 찍히게 된다.
이러면.... 진도가 되지 않기에 수정이 필요했다.

사실 저번에도 이런 문제가 있었는데,
당시엔 해결 방법이 보이지 않아, 다른 데이터로 대체했었다.



하 지 만,
이번에는 무슨 일이 있어도 해결하고 싶다는 승부욕🔥이 불타올라
팀원 중 한 분인 보람님과 여러 시도를 해보았고,
문제를 해결했다.
(보람님이 나보다 조금 더 빨리 문제를 해결하여 도움을 조금 받았다ㅎ)


2. 해결법

# 데이터 프레임의 리스트가 통으로 문자열인 경우
# 내가 생각한 방법 : list로 하나씩 꺼내서 다시 dataframe에 넣기
# 나의 의도 : 데이터 프레임에서 list 형식으로 꺼낸 후, 전처리를 하고 다시 데이터프레임으로 넣기

rpt = recipe['steps'][0]
rpt_tmp = rpt.split("',")

rpt_lst = []
for rpt in rpt_tmp:
  tmp1 = rpt.replace("['", "")
  tmp2 = tmp1.replace("']", "")
  tmp3 = tmp2.replace("'", "")
  rpt_lst.append(tmp3)
print(rpt_lst)

# 결과
rpt_lst[1]
#  depending on size of squash , cut into half or fourths

테스트로 코드를 짠 것은 성공했었다.
그러나 전체 데이터프레임에 적용하기엔 시간이 너무 오래 걸리고,
GPU도 많이 잡아먹을 것 같아 조금 막막했다.

내가 짠 테스트 코드가 성공했음과 동시에,
보람님께서 풀었다고 톡을 보냈다.

훨씬 간결하고 좋은 방법이었다.

# 조원 언니의 방법 : df에서 바로 replace로 바꾼 후, 호출 시 split하기
# 방법이 다른 이유 : ingredient는 재료의 나열로, 단순 ","로 나눌 수 있음.

recipe['ingredients'] = recipe['ingredients'].str.replace('[','')
recipe['ingredients'] = recipe['ingredients'].str.replace("'",'')

print(recipe['ingredients'][1].split(sep=',')[0])
# 결과 : prepared pizza crust

나는 이 코드를 참조하며 내 코드를 바로 리팩토링하였다.
까먹으면 안되니까ㅎㅎ

# 나의 코드 리팩토링 하기
# "[", "]"를 replace를 한 후, 데이터프레임의 요소를 확인해보면, _'for sweet'으로 나옴
# 따라서 "_'"를 replace 하고 
# 필요한 요소를 "'," 기준으로 split하여 조회하면 알맞게 나옴

recipe['steps'] = recipe['steps'].str.replace("[","")
recipe['steps'] = recipe['steps'].str.replace("]","")
recipe['steps'] = recipe['steps'].str.replace(" '","")

print(recipe['steps'][0].split(sep="',")[5])
# 결과 : for sweet squash , drizzle melted honey , butter , grated piloncillo over each cut squash piece

해결했다.

오늘도 발전했다 :)

profile
코딩 일기

0개의 댓글