AI 전문가가 되고싶은 사람
파이썬 프로그래밍 ( 데이터 프레임 변경 및 결합 ) 복습 본문
데이터 프레임 변경
# 데이터 읽어오기
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)
- 가로로 합치기 : 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 ( 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)
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')
'기자단 활동' 카테고리의 다른 글
분산 분석 ( ANOVA) 및 이변량 분석 복습 (0) | 2024.03.01 |
---|---|
가설 검정, 중심 극한 정리, t-test 정리 및 복습 (2) | 2024.02.28 |
파이썬 시각화와 단변량 분석 복습 ( + 시계열 데이터 처리 ) (1) | 2024.02.28 |
파이썬 프로그래밍 (pandas) 복습 (0) | 2024.02.24 |
파이썬 프로그래밍 ( Numpy ) 복습 (0) | 2024.02.23 |