Pandas 기초 2 - append, concat, group by


Index

1. append

 

2. concat

      1_위 아래 결합하기

      2_좌우 데이터 결합하기

 

3. group by


Pandas 기초 2 - append,  concat, group by

 

들어가기 전에...

 

먼저 데이터에 이름과 나이가 들어간 모듈을 만들어 놓고, 

import해서 필요한 데이터를 만들겠습니다.

 

#모듈 만드는 법 

[코드예제]

import random
import numpy as np

# 이름을 랜덤으로 출력하는 함수
def get_name():
    names = ["na1", "na2", "na3","na4", "na5", "na6", "na7", "na8", "na9", "na10"]
    return random.choice(names)

# 나이를 20세에서 40세까지 랜덤하게 출력
def get_age(start=20, end=40):
    return np.random.randint(start, end + 1)

# 나이와 데이터를 가지고, 데이터를 만들어주는 함수 
def make_data(rows=10):
    datas = []
    for _ in range(rows):
        data = {"Age": get_age(), "Name": get_name()}
        datas.append(data)
    return datas


 

 

모듈을 임포트 하여서 함수가 제대로 동작 되는지 확인하겠습니다.

 

from makedata import *

 

get_name()함수를 실행시킬때 마다 다른 이름이 나오는 것을 확인할 수 있습니다.

 

[코드예제]

get_name()

[결과] 

'na10'

 

마찬가지로 get_age() 를 실행시킬 때마다,  다른 나이가 출력됩니다.

 

[코드예제]

get_age()

[결과] 

23

 

make_data() 함수를 이용해 age / name 을 각각 5개씩 가지는 (2열 5행) 의 행렬을 만들어보겠습니다.

 

[코드예제]

df1 = pd.DataFrame(makedata(5))
df2 = pd.DataFrame(makedata(5))
df1

[결과] 

[코드예제]

df2

 

[결과] 

 

이제 만들어 놓은 행렬을 가지고, append concat, group by를 익혀보겠습니다.

 


1. append

append를 활용하여 데이터 프레임을 합쳐보겠습니다. 

사용법은 dataframe1.append(dataframe2)

 

df1과 df2를 합쳐 df3를 만들고,

df3의 3번째~7번째까지 데이터를 보겠습니다.

[코드예제]

df3 = df1.append(df2)
df3[2:7]

위아래로 데이터가 결합되어서,

df1의 데이터 3~5번째까지의 데이터와

df2의 데이터 1~2번째까지 데이터가 보여집니다.

[결과] 

여기서 알 수 있는 점은 index가 바뀌지 않았다는 것입니다.

reset_index 함수를 사용해서 인덱스를 재 정렬해보겠습니다. 

[코드예제]

df3.reset_index(drop=True, inplace=True)
df3.tail(2)

[결과] 

번거롭게 reset_index를 사용하지 않고도, 

append함수를 적용하며 바로 인덱스를 자동으로 입력할 수 있습니다.

ignore_index를 True로 설정하면 가능합니다. 

 

[코드예제]

df3 = df1.append(df2, ignore_index=True) 
df3.tail(2)

[결과] 

 


2. concat

row나 column으로 데이터 프레임을 합칠 때 사용합니다. 

 

1_ 위 아래 결합하기

기본으로 위 아래로 합쳐집니다.

 

[코드예제]

df3 = pd.concat([df1, df2]).reset_index(drop=True)
df3.tail(2)

[결과] 

 

2_ 좌우로 결합

위 아래가 아닌, 좌우로 결합하고 싶다면 axis=1 을 설정하여

좌우로 결합할 수 있습니다. 

부족한 값에 대해서는 NaN으로 자동 입력됩니다. 

 

[코드예제]

pd.concat([df3, df1], axis=1)

[결과] 

 

NaN 이 아닌, 데이터가 있는 값들만 보고 싶다면 join을 설정합니다.

 

[코드예제]

pd.concat([df3, df1], axis=1, join="inner")

[결과] 

 


3. group by

특정 컬럼의 중복되는 데이터를 합쳐서 새로운 데이터 프레임을 만들 수 있습니다.

먼저 필요한 데이터 프레임을 만들어 보겠습니다.

 

[코드예제]

df = pd.DataFrame(make_data())
df

[결과] 

 

이름이 같은 데이터가 몇개 있는지 size와 count를 사용하여 세어보겠습니다. 

[코드예제]

result_df = df.groupby("Name").size().reset_index(name="count")
result_df

[결과]

 

 

sort_values : 설정한 컬럼으로 데이터 프레임을 정렬

result_df.sort_values(["count", "Name"], ascending=False, inplace=True)
result_df.reset_index(drop=True, inplace=True)
result_df

# agg() 
# size(), min(), max(), mean()

df.groupby("Name").agg("mean").reset_index()

 

# 데이터를 요약해서 보여주는 함수 describe

df.describe()

댓글

Designed by JB FACTORY