본문 바로가기
Programming/Python & Django

[Django] shell에서 pandas를 이용해 중복 데이터 drop하기

by mingule 2020. 8. 3.

django_import_export를 쓰면서 기본적으로는 데이터 중복이 알아서 잘 들어가지만 가끔 안먹고 똑같은 데이터가 중복해 들어갈 때가 있다. 그런 경우에는 백단에서 어떻게 처리? 작업?을 해줘야 하는지 잘 모르겠어서 django shell을 사용해 중복을 제거해 주기로 결정했따.

사실 중복 제거.. 라기 보다는 db 내용을 복사해 dataframe으로 만들어 drop해준 후, db 초기화를 한 후 다시 넣어주는 것이다. 

더 좋은 방법이 있으면 다시 포스팅 하는 것으로..

일딴 시작!

 

필요한 라이브러리는 pandas!

pip3 install pandas

위를 이용해 pandas 라이브러리를 다운받는당.

python3 manage.py shell

터미널에 위 코드를 입력해 shell을 켜준다.

from cards.models import Card #카드 모델을 사용할 수 있게 가져와준다.
df = pd.DataFrame(list(Card.objects.all().values()))

내가 데이터를 drop할 모델은 Card라는 모델이고, 그것을 사용할 수 있게 가져와준 후, Dataframe으로 변환시켜 df라는 이름에 넣어준다.

df = df.drop_duplicates(subset=["name", "phone"], keep="first")

나는 이름과 전화번호가 같은 열들을 drop해 줄 것이기 때문에 subset을 이름과 전화번호로 넣었고, 첫번째 데이터만 남겨놓을 것이기 때문에 keep="first"를 줬다. 그리고 중복 제거를 한 dataframe을 다시 df라는 이름으로 덮어씌워줬다.

중복 제거를 했기 때문에, 이제 다시 df를 Card db에 넣어주기만 하면 된다!

 

넣어주기 전, Card db를 초기화한다. 모든 내용을 지워주는 것!

Card.objects.all().delete()

그리고 데이터를 하나씩 돌면서 다시 모델에 넣어 save를 해주면 된다.

for index, row in df.iterrows():
    model = Card()
    model.name = row["name"]
    model.company = row["company]
    model.save()

 

댓글