[Python] 예제로 익히는 Python 02 ~ 03

Data_Student·2024년 10월 23일
0

Python

목록 보기
2/7

[Python] 예제로 익히는 Python 02 ~ 03

예제로 익히는 파이썬 - 2회차 정리 및 복습


01. Python 데이터 결합

1. Merge : pandas의 함수 중 하나로, 공통컬럼을 기준으로 테이블을 병합

  • SQL 구문의 JOIN과 가장 유사

    1) 주요 옵션(파라미터)

    • on : 조건 컬럼이 한개인지 여러개인지
    • how : 어떤 조인 방식을 사용할 것인지(inner, outer, left, right)
    • left on / right on : 열기준 병합 시 기준으로 할 열의 양측 이름이 다르다면, 각각 어떤 열을 기준으로 할지 지정
    • sort : 병합 후 인덱스 정렬 여부(True/False)
    • suffixes : 중복된 컬럼 이름의 처리(SQL의 distinct 느낌)
    • indicator: Truu로 할 경우, 마지막 열에 병합 정보를 출력
    # 기본 작성구문으로, 디폴트값은 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'))

2. Join

  • pandas의 함수 중 하나로 Join은 인덱스 기준으로 테이블을 병합(index - 축)

    1) 주요 옵션(파라미터)

    • 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)

3. Concat

  • pandas 의 함수 중 하나로, 여러 데이터프레임 또는 시리즈를 특정 축을 따라 연결

    1) 주요 옵션(파라미터)

    • axis : 수직결합, 수평결합 여부(axis=0: 수직결합(기본값) / axis=1: 수평결합)
    • join : 어떤 조인 방식을 사용할 것인지(inner, outer, left, right)
    • join_axes : 조인 축 지정
    • keys : 데이터프레임 축이름 지정
    • ignore_index=True : 인덱스 재배열
    • 디폴트 결합 형식 : outer join(합집합)
    # 기본 작성구문
    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')

4. Append

  • pandas의 함수 중 하나, 데이터프레임에 행을 추가하는 메서드로 두 데이터프레임을 행 기준으로 결합

    1) 주요 옵션(파라미터)

    • ignore_index : 기존 인덱스 사용 여부, False로 할 경우 0, 1, 2, ..., n 부여
    • sort : 열을 사전적으로 정렬할지 여부
    # 단순 결합, 없는 건 NaN으로 처리되고 결합
    # df2 가 df 의 아래로 붙음
    df.append(df2)
  • Merge 와 JOIN의 차이점 / Concat 과 Append의 차이점 인지하기

02. Pivot Table

  • 데이터의 열을 기준으로 피벗테이블로 변환시키는 함수

    1) 주요 옵션(파라미터)

    • index : 인덱스(축)으로 사용될 열
    • columns : 열로 사용될 열
    • values : 값으로 사용될 열
      • index 및 columns에 리스트 형태로 입력 → 멀티 인덱스 기반의 피벗테이블
      • values에 리스트를 입력 → 각 값에 대한 테이블이 연속적으로 생성
    • aggfunc : 어떠한 계산을 할지
      • 합 - aggfunc='sum'
      • 평균 - aggfunc='mean'
      • 표준편차 - aggfunc='std'
      • 갯수 - aggfunc='count'
      • 갯수(중복제거) - aggfunc='nunique'
      • 최대값 - aggfunc='max'
      • 최솟값 - aggfunc='min'
    • fill_value : NaN 값을 처리하고 싶을 때 사용, fill_value=0이 가장 많이 사용
    • dropna : 결측치(na)삭제 여부 결정
    • sort : index or columns 기준으로 정렬
    # 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')

03. 그 외 유용한 메서드

1. lambda

  • 람다 함수는 이름이 없는 함수로, 함수를 한번만 사용하거나 인자로 전달할 때 유용
   # 1.기본 표현구문
   lambda 매개변수 : 표현식
`
   #2.이해하기
   들어온 값에 2를 곱해서 반환한다고 하면 lambda x : x * 2  
`
   #3.기존 함수 작성방식과 비교하기 
   #두 수를 더하는 함수
   def plus(a,b):
   	return a+b
   plus(10,40)
> 50
`
   #두 수를 더하는 함수 - 람다 형식
   (lambda a,b: a + b)(10, 40)

2. split

  • 하나의 값으로 묶여있는 데이터를 문자열 기준으로 나눌 때 사용
    1) 주요 옵션(파라미터)
    • sep : 문자열을 나눌 구분자 기업
    • maxsplit : 최대 split 횟수 (기본값 : 모두 나눔)
    # 예시 문자열 선언 
    s = "aa.bb.cc.dd.ee.ff.gg"
`
    # '.' 구분자를 기준으로 데이터를 나눔 
    # 아래 두 코드 결과 동일 
    s.split('.')
    s.split(sep='.')
`
    # '.' 구분자를 기준으로 데이터를 나누고 컬럼으로 받음 
    # lambda 함수와 결합하여 사용하는 경우 
    # 7번 반복, a 를 컬럼 구분자로 받아주고, format 함수를 통해 a0, a1, a2 ... 로 표기
    # lambda 함수를 통해 '.' 로 구분. 단, len(x.split('.')), 즉 7 보다 i 가 작을 때 수행
    # 중요
    for i in range(7):
    	df2["a{}".format(i)] = df2['x'].apply(lambda x: x.split('.')[i] if len(x.split('.'))>i else None)

3. rrule

  • dateutil 라이브러리에 속한 함수로, 날짜 데이터를 원하는 기준에 따라 output으로 가져옴
    1) 주요 옵션(파라미터)
    • 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 의 형태로 변환
	# 위에서 받은 리스트에 해당하는 데이터만 필터링하기 위함 
	df3['Time stamp2'] = pd.to_datetime(df3['Time stamp']).dt.strftime('%Y-%m-%d')
	mask =(df3['Time stamp2'].isin(a))
	df3[mask]

0개의 댓글