[머신러닝을 위한 파이썬] Pandas #2

2024. 12. 26. 02:42MOOC

1. Group By 및 Aggregation

데이터를 특정 열 기준으로 그룹화하고, 합계 등을 계산.

import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
                     'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
            'Rank': [1, 2, 2, 3, 3, 4, 1, 1, 2, 4, 1, 2],
            'Year': [2014, 2015, 2014, 2015, 2014, 2015, 2016, 2017, 2016, 2014, 2015, 2017],
            'Points': [876, 789, 863, 673, 741, 812, 756, 788, 694, 701, 804, 690]}

df = pd.DataFrame(ipl_data)

grouped_points = df.groupby("Team")["Points"].sum()
print(grouped_points)

h_index = df.groupby(["Team", "Year"])["Points"].sum()
print(h_index)

2. Pivot Table과 Crosstab

데이터를 테이블 형식으로 재구조화.

df_phone = pd.DataFrame({
    'date': ['2014-11-15', '2014-11-15', '2014-11-16'],
    'duration': [34.429, 13.0, 23.0],
    'item': ['data', 'call', 'call'],
    'month': ['2014-11', '2014-11', '2014-11'],
    'network': ['data', 'Vodafone', 'Meteor']
})

pivot_table = df_phone.pivot_table(
    values="duration", 
    index="month", 
    columns="network", 
    aggfunc="sum", 
    fill_value=0
)
print(pivot_table)

crosstab = pd.crosstab(
    index=df_phone['month'], 
    columns=df_phone['network'], 
    values=df_phone['duration'], 
    aggfunc='sum'
).fillna(0)
print(crosstab)

3. 데이터 병합

두 데이터프레임을 다양한 방식으로 병합.

df_a = pd.DataFrame({
    'subject_id': ['1', '2', '3', '4', '5'],
    'test_score': [51, 15, 15, 61, 16]
})

df_b = pd.DataFrame({
    'subject_id': ['4', '5', '6', '7', '8'],
    'first_name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
    'last_name': ['Bonder', 'Black', 'Balwner', 'Brice', 'Btisan']
})

merged_inner = pd.merge(df_a, df_b, on='subject_id', how='inner')
print(merged_inner)

merged_left = pd.merge(df_a, df_b, on='subject_id', how='left')
print(merged_left)

4. 데이터 저장 및 불러오기

Pandas를 사용하여 데이터를 파일로 저장하고 불러오기.

df_routes = pd.DataFrame({
    'route_id': [1, 2, 3],
    'source': ['A', 'B', 'C'],
    'destination': ['X', 'Y', 'Z']
})

df_routes.to_csv("routes.csv", index=False)
loaded_routes = pd.read_csv("routes.csv")
print(loaded_routes)