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()
'IT develop > CODING' 카테고리의 다른 글
Pandas 기초 1 - Series, DataFrame, apply (0) | 2021.03.08 |
---|---|
NumPy 기초 3 - 행렬 데이터의 결합, concatenate 함수 (0) | 2021.03.08 |
NumPy 기초 2 - linspace, logspace 함수, NumPy random (0) | 2021.03.07 |
NumPy 기초 1 - numpy란, 행렬, 데이터선택, 브로드캐스팅(broad casting), 마스킹(masking) (0) | 2021.03.07 |
[Jupyter Notebook] space 번거로움을 자동적으로 바꾸어주는 auto pep8 설치 (0) | 2021.03.07 |