Notice
Recent Posts
Recent Comments
Link
01-04 19:27
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

AI 전문가가 되고싶은 사람

파이썬 프로그래밍 ( 데이터 프레임 변경 및 결합 ) 복습 본문

기자단 활동

파이썬 프로그래밍 ( 데이터 프레임 변경 및 결합 ) 복습

Kimseungwoo0407 2024. 2. 26. 20:33

데이터 프레임 변경

 

# 데이터 읽어오기
data = pd.read_csv('https://raw.githubusercontent.com/DA4BAM/dataset/master/Attrition_simple2.CSV')

 

● 열 이름 변경

1. 일부 열 이름 변경

- rename() 메소드 사용해 변경 전후 열 이름을 딕셔너리 형태로 나열하는 방법으로 변경

- inplace = True 옵션을 설정해야 변경 사항이 실제 반영이 된다. ( False일 경우 조회 )

# rename() 함수로 열 이름 변경
data.rename(columns={'DistanceFromHome' : 'Dis', 
                    'EmployeeNumber' : 'EN',
                    'JobSatisfaction' : 'JS',
                    'MonthlyIncome' : 'MI',
                    'PercentSalaryHike' : 'PSH',
                    'TotalWorkingYears' : 'TWY'}, inplace=True)

 

2. 모든 열 이름 변경

- 모든 열 이름을 변경할 때는 columns 속성을 변경

# 모든 열 이름 변경
data.columns = ['Attr','Age','Dis','EN','Gen','JS','Marital','MI', 'OT', 'PSH', 'TWY']

 

3. 일부 열 이름 변경과 모든 열 이름 변경의 결과

● 열 추가

1. 인덱스 활용

- 새로운 열을 추가하여 기존 데이터에서 계산된 결과값을 저장해야할 경우가 있음

# final_amt 열 추가
data['Income_LY'] = data['M_Income'] / (1+data['PctSalHike']/100 )
data['Income_LY'] = round(data['Income_LY'])

● 열 삭제

- 삭제하기 전에 항상 조심 해야 함 -> 기존 데이터를 복사하여 먼저 해보는 게 좋음

# data를 복사합니다.
data2 = data.copy()

 

1. 열 하나 삭제

- drop() 메소드를 사용해 열 삭제

- axis = 0 : 행 삭제 ( 기본 값 ) , axis = 1: 열 삭제

- inplace = True 옵션을 지정해야 실제로 반영이 됨

# 열 하나 삭제
data2.drop('Gen', axis=1, inplace=True)

 

2. 여러 열 삭제

- 삭제할 열을 리스트 형태로 전달해 한 번에 여러 열을 제거할 수 있음

# 열 두 개 삭제
data2.drop(['JobSat2','Gen'], axis=1, inplace=True)

 

● 값 변경 1

- 마찬가지로 항상 조심하기

# data를 복사합니다.
data2 = data.copy()

1. 열 전체 값 변경

# Income_LY의 값을 모두 0로 변경해 봅시다.
data2['Income_LY'] = 0

 

2. 조건에 의한 값 변경 1

# Diff_Income 의 값이 800보다 작은 경우, 0로 변경해 봅시다.
data2.loc[data2['Diff_Income'] < 800, 'Diff_Income' ] = 0

 

3. 조건에 의한 값 변경 2 ( np.where )

 

# Age가 35보다 많으면 1, 아니면 0으로 바꿔 봅시다.
data2['Age'] = np.where(data2['Age'] > 35, 1, 0)

 

● 값 변경 2

# data를 복사합니다.
data2 = data.copy()

 

1. map()

- 주로 범주형 값 다른 값으로 변경

- 다음 구문은 Marital 변수의 Single, Married을 각각 숫자 1, 0으로 변경

# Married -> 1, Single -> 0
data['Marital'] = data['Marital'].map({'Married': 1, 'Single': 0})

 

2. cut()

- pd.cut() 함수를 이용하여, 숫자형 변수를 범주형 변수로 변환 가능

# Age 변수의 분포 확인
data2['Age'].describe()

 

- 전체 범위 균등 분할하기 ( 값의 개수를 균등하게 맞추는 것이 아닌 범위를 분할 하는 것 )

# 3 등분으로 분할
age_group = pd.cut(data2['Age'], 3)

 

- 분할된 범주에 이름 붙이기

#  3 등분으로 분할후 one,two,three로 이름 붙이기기
age_group = pd.cut(data2['Age'], 3, labels = ['one','two','three'])

 

- 원하는 구간으로 자르기 : bins = []

# 나이를 다음 구간으로 분할합니다.
# 'young'  : =< 30 
# 'junior' : 30 <   =< 50
# 'senior' : 50 < 

age_group = pd.cut(data2['Age'], bins =[0, 30, 50, 100] , labels = ['young','junior','senior'])
age_group.value_counts()

데이터 프레임 결합

1. 환경 준비

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

sales = pd.read_csv("https://raw.githubusercontent.com/DA4BAM/dataset/master/ts_sales_simple.csv")

sales1 = sales.loc[sales['Store_ID']==1]
sales2 = sales.loc[sales['Store_ID']==2]
sales5 = sales.loc[sales['Store_ID']==5]
sales11 = sales.loc[sales['Store_ID']==11]

products = pd.read_csv("https://raw.githubusercontent.com/DA4BAM/dataset/master/ts_product_master.csv")
stores = pd.read_csv("https://raw.githubusercontent.com/DA4BAM/dataset/master/ts_store_master.csv")

 

 

2. 결합 1 : 붙이기 ( concat() )

df1 = pd.DataFrame({'A':[10,25], 'B':[15,30]})
df2 = pd.DataFrame({'A':[20,30, 50], 'C':[35,30, 40]})
df2.drop([1], inplace = True)


display(df1)
display(df2)

 

 

- 세로로 합치기 : axis = 0

a = pd.concat([df1, df2], axis = 0, join = 'inner')
b = pd.concat([df1, df2], axis = 0, join = 'outer')

display(a)
display(b)

 

 

 

 

join = 'inner', join='outer'

 

- 가로로 합치기 : axis = 1

 

a1 = pd.concat([df1, df2], axis = 1, join = 'inner')
b1 = pd.concat([df1, df2], axis = 1, join = 'outer')

display(a1)
display(b1)

 

 

 

join = 'inner                                        join = 'outer'

결합 : 조인 join ( merge )

- 자동으로 key를 잡아주며, default로 inner join을 함

df1 = pd.DataFrame({'A':[1,2], 'B':[15,30], 'C':[20, 25]})
df2 = pd.DataFrame({'A':[2,3], 'D':[25, 40]})

display(df1)
display(df2)

 

 

df1                                  df2

 

1. inner merge

pd.merge(df1, df2, how = 'inner')

 

2. left merge

pd.merge(df1, df2, how = 'left')

 

3. right merge

pd.merge(df1, df2, how = 'right')