일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- python
- 표분편차
- 모집단
- 재퀴쿼리
- calesce
- 날짜함수
- join
- 정규분포
- lambda
- 신뢰구간
- 표본
- rrule
- concat
- limit
- 데이터 리터러시
- 표준오차
- dateofmonth
- 재귀쿼리
- 프로그래머스
- DATE_FORMAT
- merge
- truncate
- floor
- append
- datediff
- 표본분포
- pivot table
- curdate
- Recursive
- split
- Today
- Total
hyezdata 님의 블로그
실습으로 익히는 python 3회차 본문
python 테이블 결합
merge
SQL의 JOIN과 비슷
파라미터 (※ 파라미터 : 함수가 지원하는 조건들)
# [수평결합]
# 컬럼명이 같은 경우의 예시를 보여주기 위해 컬럼명을 임의로 변경해 줌
df3['Customer ID']=df3['user id']
# 기본 작성구문으로, 디폴트값은 inner join
# 공통컬럼값은 합쳐져 하나의 컬럼으로 출력
merge_df = pd.merge(df2,df3)
# 위 코드와 동일한 기능입니다. on 절을 사용할 수 있어요.
merge_df = pd.merge(df2,df3, how='inner', on='Customer ID')
# 공통컬럼이 2개 이상일 때
merge_df = pd.merge(df2, df3, how='inner', on=['공통컬럼1','공통컬럼2'])
# 기준열 이름이 다를 때
merge_df = pd.merge(df2,df3, how='inner', left_on = 'Customer ID', right_on = 'user id')
# 공통컬럼을 개별로 출력하고 싶을 때
merge_df = pd.merge(df2,df3, how='inner', on='Customer ID', suffixes=('_left','_rihgt'))
세번째 코드를 예를 들면 pandas에서 merge라는 함수를 쓸건데 how와 on이라는 파라미터가 있다. 라고 할 수 있음
코드 예시를 봐 보면~
두번째 코드, 디폴트는 inner 조인으로 파라미터 안 써줘도 됨
- on : SQL과 같음, 뭘 가지고 묶을 것 인지
- how : 어떤 조인 방식을 사용할 것 인지 (left, inner, right, outer)
- left on / right on : 조인으로 병합을 했을 때 열의 양측 이름이 다르다면, 각각 어떤 컬럼을 기준으로 할 지 지정
- sort: 병합 후 인덱스 정렬 여부(True/False)
- suffixes: 똑같은 컬럼의 이름이 있을 때 구분하기 위해서 이름을 추가해준다.
- ex. 병합 했을 때 테이블 ( _left, _right)
- 이름 나이_left 나이_right 직업 연봉
- indicator: True 로 할 경우, 마지막 열에 병합 정보를 출력
JOIN
인덱스(축) 기준으로 테이블을 병합
파라미터
- how : 어떤 조인 방식을 사용할 것 인지 (inner, outer, left, right)
- lsuffix / rsuffix : 이름이 같은 컬럼이 있을 경우, 문자열 지정하여 부여
- sort : 인덱스 정렬여부(True / False)
# 단순 조인
df2.join(df3)
# join 방식 설정
df2.join(df3, how='right')
# join시 이름이 같은 컬럼이 있을 경우, 옵션으로 설정하여 조인 가능
# 아래 코드는 오류가 남
# df.join(df2)
df.join(df2,how='left', lsuffix='1', rsuffix='2')
# join 이후, 인덱스 정렬하기
df.join(df2,how='left', lsuffix='1', rsuffix='2', sort=True)
merge와 join의 차이점
Concat
여러 데이터프레임 또는 시리즈를 특정 축을 따라 연결하는 데 사용 (만능임)
파라미터
- axis : 수직결합인지, 수평결합인지(axis=0: 수직결합(기본값; 아무것도 안 썼을 때) / axis=1: 수평결합)
- join : 어떤 조인 방식을 사용할 것인지 (inner, outer, left, right)
- join_axes : 조인 축 지정
- keys : 데이터프레임 축이름 지정
- ignore_index=True : 인덱스 재배열
# 기본 작성구문
pd.concat([df2, df3])
# 세로로 결합
pd.concat([df2, df3], axis=0, ignore_index=True, join='inner')
# 가로로 결합
pd.concat([df2, df3], axis=1, ignore_index=True, join='inner')
concat에선 JOIN이 수직 결합도 가능
append
데이터프레임에 행을 추가하는 메서드로, 두 데이터프레임을 행 기준으로 결합
- ignore_index : 기존 인덱스를 사용할지 여부. False로 할 경우 0,1,2,..,n 이 부여
- sort : 열을 사전적으로 정렬할 지 여부
# 기능이 없어질 예정으로 아래와 같이 concat 으로 변경하여 실행해주시면 됩니다.
# 에러가 아닌 경고메시지로, 이를 무시하고 싶다면 아래와 같은 코드를 입력해주시면 됩니다.
# import warnings
# warnings.filterwarnings('ignore')
# 단순 결합, 없는 건 NaN으로 처리되고 결합
# df2 가 df 의 아래로 붙음
df.append(df2)
근데 append는 사라질 수도... concat으로 대체 가능하기 때문
아직 사용할 순 있지만 경고 메세지가 뜸
merge와 append 차이점
Pivot Table
내 마음대로 보고 싶은 컬럼을 뽑아 테이블을 보고 싶을 때 사용
정확히는 데이터의 열을 기준으로 피벗테이블로 변환시키는 함수.
데이터 가공 및 시각화를 위해, 데이터프레임을 자유롭게 변환하는 pivot table 은 필수이다.
파라미터
# age 라는 축을 기준으로 카테고리별 고객id 카운트
pd.pivot_table(df2, index='Age', columns='Category', values='Customer ID', aggfunc='count')
# age, Category 라는 축을 기준으로 성별 Previous Purchases 최소, 최대값 구하기
pd.pivot_table(df2, index=['Age','Category'],columns='Gender', values='Previous Purchases', aggfunc=['min','max'])
# 성별을 축으로 하고, 사이즈, 나이별 고객id 고유하게 카운트
pd.pivot_table(df2, index=['Gender'],columns=['Size','Age'], values='Customer ID', aggfunc='nunique')
- index : 인덱스(축) 으로 사용될 열
- columns : 열로 사용될 열
- values : 값으로 사용될 열
- aggfunc : 어떠한 계산을 할 지
- fill_value : NaN 값을 처리하고 싶을 때 사용, fill_value=0 이 가장 많이 사용됨
- dropna : 결측치(na)삭제 여부 결정
- sort : index or columns 기준으로 정렬
★ index 및 columns에 리스트 형태를 입력할 경우, 멀티 인덱스 기반 피벗테이블이 생성됨
★ values 에 리스트를 입력 할 경우, 각 값에 대한 테이블이 연속적으로 생성됨
그 외 메서드
lambda
람다 함수는 이름이 없는 함수로, 일반적으로 함수를 한 번만 사용하거나 함수를 인자로 전달해야 하는 경우에 매우 유용하게 사용
# lambda 함수를 이용한 홀수 출력하기
mylist = [1, 2, 3, 4, 5]
mylist2 = list(filter(lambda x: x % 2 == 1, mylist))
print(mylist2)
# lambda 함수를 이용한 정렬
mylist = ['apple', 'banana', 'cherry']
mylist2 = sorted(mylist, key=lambda x: len(x))
print(mylist2)
split
하나의 값으로 묶여있는 데이터를 문자열 기준으로 나눌 때 사용 (SQL에서 substring, split과 비슷)
파라미터
- sep : 문자열을 나눌 구분자 기입
- maxsplit : 최대 split 횟수 (디폴트: 모두 다 나눔)
# 예시 문자열 선언
s = "aa.bb.cc.dd.ee.ff.gg"
# '.' 구분자를 기준으로 데이터를 나눔
# 아래 두 코드 결과 동일
s.split('.')
s.split(sep='.')
# df 에 x 컬럼추가
df2['x']="aa.bb.cc.dd.ee.ff.gg"
# '.' 구분자를 기준으로 데이터를 나누고 컬럼으로 받음
# lambda 함수와 결합하여 사용하는 경우
# 7번 반복, a 를 컬럼 구분자로 받아주고, format 함수를 통해 a0, a1, a2 ... 로 표기
# lambda 함수를 통해 '.' 로 구분. 단, len(x.split('.') 즉 7 보다 i 가 작을 때 수행
# 중요
for i in range(i):
df2["a{}".format(i)] = df2['x'].apply(lambda x: x.split('.')[i] if len(x.split('.'))>i else None)
rrule
날짜 데이터를 원하는 기준에 따라 output 으로 가져올 수 있다.
파라미터
- freq : 반복 주기를 나타내는 파라미터로, SECONDLY, MINUTELY, HOURLY, DAILY, WEEKLY, MONTHLY, YEARLY
- dtstart: 반복이 시작하는 날짜와 시간을 나타냅니다.
- interval: 주기적으로 반복되는 간격을 나타냅니다.
- count: 생성할 날짜의 최대 수를 나타냅니다.
- until: 반복이 끝나는 날짜와 시간을 나타냅니다.
# 라이브러리 불러오기
from datetime import datetime
from dateutil.rrule import rrule, DAILY, TU
# 시작 날짜, 종료날짜
start_date = datetime(2024, 2, 1)
end_date = datetime(2024, 3, 1)
# 2024-02-01 부터 2024-03-01 까지 strf 사용하여 원하는 데이터 형식으로 출력.
weekly_rule = rrule(DAILY, dtstart=start_date, until=end_date)
for date in weekly_rule:
print(date.strftime('%Y-%m-%d'))
# 빈 리스트 생성 후 날짜를 담아주기
a=[]
for date in weekly_rule:
a.append(date.strftime('%Y-%m-%d'))
# 2023-02-01 부터 2023-03-01 까지 strf 사용하여 원하는 데이터 형식으로 출력
weekly_rule = rrule(DAILY, dtstart=start_date, until=end_date)
# 데이터프레임에서 특정 날짜기간에 해당하는 데이터만 슬라이싱 하기
# 빈 리스트 생성 후 날짜를 담아주기
a=[]
for date in weekly_rule:
a.append(date.strftime('%Y-%m-%d'))
# df3 에 있는 날짜 데이터는 string
# string -> datetimd -> string 의 형태로 변환
# 위에서 받은 리스트에 해당하는 데이터만 필터링하기 위함
# 날짜가 "일/월/연도" 순서라면 dayfirst=True 사용. (자동으로 변환)
df3['Time stamp2'] = pd.to_datetime(df3['Time stamp']).dt.strftime('%Y-%m-%d')
mask =(df3['Time stamp2'].isin(a))
df3[mask]
※ 함수와 메서드 차이점
일단 먼저 객체를 알아야 하는데 객체란
그래서 함수와 메서드의 차이점은
'내일배움캠프 > 파이썬' 카테고리의 다른 글
실습으로 익히는 python 5회차, 6회차 (0) | 2025.03.19 |
---|---|
실습으로 익히는 python 4회차 (0) | 2025.03.17 |
실습으로 익히는 python 2회차 (0) | 2025.03.13 |
실습으로 익히는 python 1회차 (0) | 2025.03.11 |
데이터 분석 파이썬 5주차 (2) (0) | 2025.03.10 |