본문 바로가기

카테고리 없음

[Pandas] DataFrame 조작하기

다음시간에는 저번시간에 이어 브랜드 별 할인율을 다르게 적용하여 할인액을 구하고, 같은 제품 & 사이즈별로 묶어 중복되는 행을 삭제하고 재고 수로 표시하는 방법을 배우겠다.

추가적으로 여러개로 쪼개진 DatFrame을 하나로 합쳐 사용을 하거나, 데이터의 Feature에 따라 데이터를 정리(?)하는 법을 배우겠다.

 

 

 

1.데이터를 합치는 방법.

좌측의 데이터는 지난 시간에 만든 매장에 입고된 신발의 정보이다.

우측의 데이터는 브랜드 별 할인율을 나타내는 데이터이다.

 

좌측의 Data를 우측과 합치기 위해선 여러가지 명령어가 있는데 이것에 대해 배워 보겠다.

 

데이터를 합치는 방법 concat과 Join/merge

 

 

Concat

위에서 사용한 concat은 DataFrame 두개를 붙이는 기능이다.

위는 axis = 1 을 사용하여 열 방향으로 합친 모습이고 axis 파라메터를 0로 변경해주면 아래와 같이 행 방향을 합쳐진다.

 

추가적으로 DataFrame간 합집합 교집합등의 기능 또한 이용할 수 있는데 이는 다음의 사이트에 예시와 함께 잘 정리 되어있다.

 

rfriend.tistory.com/256

 

[Python pandas] 여러개의 동일한 형태 DataFrame 합치기 : pd.concat()

분석을 하다보면 여기저기 흩어져 있는 여러 개의 데이터 테이블을 모아서 합쳐야 하는 일이 생기곤 합니다. 나를 대신해서 누군가가 데이터 전처리를 해주지 않는다고 했을 때는 말이지요. 정

rfriend.tistory.com

 

위의 방법으로도 DataFrame를 합칠 수 있지만, 우리가 원하는 브랜드 별 할인율이 입력이 되는 것이 아닐 뿐만 아니라 데이터가 없는 공간은 Nan으로 표시된다.

 

우리가 원하는 방향으로의 할인율을 적용시키고 싶다면 어떻게 해야할까?

 

바로 브랜드 별 할인율을 적용 하는 것이다. 즉 브랜드를 기준으로 합치는 방법을 알아본다.

이는 직접 구현할 수도 있지만 Pandas는 친절하게도 이러한 기능을 제공한다.

 

바로 Join/Merge 이다.

 

 

Join/Merge

Shoes에 SaleInfo를 Merge를 이용하여 적용시켜 보자.

 

아주 아주 기본적인 형식은

DataFrame.merge(DataFrame2, how = ' ', on = ' ')

on을 이용해 원하는 key값을 부여하고 how를 통해 DataFrame을 어떻게 합칠지 정한다.

how의 파라메터는 how { 'left', 'right', 'outer', 'inner', 'cross'}, 기본 'inner'로 이를 통해 어떤 프레임의 키를 어떻게 사용할지, 키를 정렬할지 정할 수 있다.

 

 

 

import pandas as pd  

df_Shoes = pd.read_csv("Shoes.csv", index_col=[0])
df_SaleInfo = pd.read_csv("sale_info.csv", index_col = [0])
df_ShoesSale = df_Shoes.merge(df_SaleInfo,how = 'left', on = '브랜드')


df_ShoesSale

 

위와 같이 적용을 하게 되면 왼쪽프레임의 key값에 맞추어서 DataFrame이 합쳐진 것을 알 수 있다.

 

 

원하는 데이터만 추리기

원하는 데이터를 Columns 기준으로 추리고 싶을때는 아래와 같이 하면 된다.

 

예를 들어 아래와 같이 브랜드와 품명별 데이터만을 보고싶을때는 이렇게 코드를 작성하면 된다.

 

df_ShoesSale[['브랜드','품명']]

isin

또 예를들어 특정 브랜드인 나이키와 반스의 데이터만을 보고 싶을때는 아래와 같이 코드를 작성하면 된다.

df_ShoesSale[df_ShoesSale['브랜드'].isin(['나이키','반스'])]

groupby

groupby의 예제이다. groupby를 이용하면 아래와 같이 브랜드, 품명, 할인율 가격. 사이즈에 맞추어 재고량을 파악 할 수 있다.

 

import pandas as pd  

df_Shoes = pd.read_csv("Shoes.csv", index_col=[0])
df_SaleInfo = pd.read_csv("sale_info.csv", index_col = [0])
df_ShoesSale = df_Shoes.merge(df_SaleInfo,how = 'left', on = '브랜드')
df_ShoesSale['재고'] =0
df_ShoesSale = df_ShoesSale.groupby(['브랜드','품명','할인율','가격','사이즈'], as_index= False).count()

df_ShoesSale

 

원하는 데이터 조건식

 

위와 같이 사이즈 280이상의 조건을 가지고 데이터 프로그램 조건을 탐색할때는 아래와 같은 코드를 작성해주면 된다.

 

import pandas as pd  

df = pd.read_csv("Shoes.csv", index_col = [0])
df['사이즈'] = pd.to_numeric(df['사이즈']) 
df_Shoes = df[(df['사이즈']>= 280)]

df_Shoes

 

Tidy

Tidy Data는 데이터를 깔끔하게 한 행으로 정리한다고 생각하면 좋다.

 

이를 하기 위해서는 Pivot, PivotTable, melt등의 관련 함수가 보다 자세히 설명이 되어있는 아래의 링크를 참조하길 바란다.

partrita.github.io/posts/tidy-data/

 

 

깔끔한 데이터(Tidy data)

깔끔한 데이터(Tidy data)란?¶우리는 데이터 분석을 수행하면서 다양한 데이터 변환 작업을 수행하게 된다. 이는 데이터가 원래 특정 분석을 염두에 두고 만들어지는 경우가 거의 없기 때문이며,

partrita.github.io