728x90
반응형
SMALL
1. 데이터프레임 합치기
df1 = pd.read_csv('http://bit.ly/ds-korean-idol')
df2 = pd.read_csv('https://bit.ly/ds-korean-idol-2')
# 데이터프레임 확인
df1
df2
df_copy = df1.copy() # 행 방향으로 합치기 위해 copy해줌, 다른 메모리 주소
1-1. concat()
- 데이터프레임을 합침
- sort=False 옵션으로 순서가 기존 순서로 유지되도록 함
- 기본적으로 axis=0이 생략되어있음(행으로 더해짐)
df_concat = pd.concat([df1, df_copy], sort=False)
df_concat
✅reset_index(): index를 새롭게 재정의하여 적용, drop=True 옵션으로 기존 index를 삭제, drop=True를 안해주게되면 기존 인덱스와 새로운 인덱스로 생김
df_concat.reset_index(drop=True)
✅ axis 옵션으로 열 방향으로 합치기
- axis=0(행)
- axis=1(열)
# 열로 합침, 같은 index와 결합(0~14에 일치하는 데이터끼리 합친것임)
pd.concat([df1, df2], axis=1)
✅ concat() 시 index의 값이 다를 경우
df3 = df2.drop([3,5]) # 3번, 5번 인덱스의 데이터를 행 방향으로 제거
df3
pd.concat([df1, df3], axis=1) # drop한 index에 대한 값은 NaN (index로 합쳤기 때문에)
# 망가진 데이터 재설정
df1 = pd.read_csv('http://bit.ly/ds-korean-idol')
df2 = pd.read_csv('https://bit.ly/ds-korean-idol-2')
# df2에서 인덱스번호 1,3,5,7,9번 데이터를 행방향으로 제거하고 새로운 변수에 저장
df_right = df2.drop([1,3,5,7,9], axis=0)
df_right
df_right =df_right.reset_index(drop=True) # 인덱스 번호 재설정
df_right
pd.concat([df1, df_right], axis=1) # index가 맞지 않으면 데이터가 망가짐!
1-2. merge()
- 특정 고유한 키(unique, idx)값을 기준으로 합침
- merge(데이터프레임1, 데이터프레임2, on='고유한 키', how='병합의 기준')
- 병합의 기준: left, right, inner (SQL 조인과 비슷)
# 이름이 같은 데이터끼리 합침(left 테이블을 기준으로 합침 -> 오른쪽 테이블
pd.merge(df1, df_right, on='이름',how='left')
# 교집합(양쪽 모두 이름이 같고 데이터가 있는것만 나옴)
pd.merge(df1, df_right, on='이름',how='inner')
# df_right에 새로운 데이터 추가
df_right = df_right.append({'이름':'김사과', '연봉':5000, '가족수':5},ignore_index=True)
df_right
pd.merge(df1, df_right, on='이름',how='right') # 오른쪽 데이터프레임은 다 나오고 없는 데이터는 NaN
# df_right의 컬럼명 변경
df_right.columns= ['성함','연봉','가족수']
df_right
pd.merge(df1, df_right, on='이름',how='left')
>>> KeyError: '이름' # df1과 merge시 이름과 성함이 다른 이름의 컬럼이기 때문에 에러남
# left_on과 right_on 옵션을 주어 합칠 열에 대한 정보를 넘겨줌
pd.merge(df1, df_right, left_on='이름', right_on='성함',how='left')
2. 등수 매기기, rank()
- 데이터프레임 또는 시리즈의 순위를 매기는 함수, 기본값은 ascending(오름차순)
# 브랜드 평판지수로 등수 매겨 새로운 파생변수로 저장
df1['브랜드 순위'] = df1['브랜드평판지수'].rank()
df1
# 높은 사람이 1등으로 나오게 내림차순 하기
df1['브랜드 순위'] = df1['브랜드평판지수'].rank(ascending=False)
df1
# 순위를 정수형으로 바꿈
# 특정 열(시리즈)의 dtype을 변경
# astype(): 특정열의 자료형을 변경
df1['브랜드 순위'] =df1['브랜드 순위'].astype('int')
df1
df1['브랜드 순위'].dtypes
>>> dtype('int64')
3. 날짜 타입(datetime)
df.info()
✅ to_datetime(): object 타입에서 datatime타입으로 변환
df['생년월일'] = pd.to_datetime(df['생년월일'])
df.info()
✅ datetime형에서 데이터 추출하기
df['생년월일'].dt.year
df['생년월일'].dt.month
df['생년월일'].dt.day
df['생년월일'].dt.hour
df['생년월일'].dt.minute
df['생년월일'].dt.second
# dayofweek: 요일 정보, 0(월요일) ~ 6(일요일)
df['생년월일'].dt.dayofweek
# isocalendar().week: 1년(52주 중)에 몇번째 주인지
df['생년월일'].dt.isocalendar().week
728x90
반응형
LIST