Programming Language/Python

[Python] Pandas package -2

LeeJaeJun 2023. 12. 29. 10:15
728x90
반응형

- 데이터프레임 합치기

  • concat(): 행 혹은 열 방향을 데이터프레임을 이어 붙이는 개념
import pandas as pd

df1 = pd.DataFrame({
	"A": ["A0", "A1", "A2", "A3"],
    "B": ["B0", "B1", "B2", "B3"],
    "C": ["C0", "C1", "C2", "C3"],
    "D": ["D0", "D1", "D2", "D3"]
},
	index = [0,1,2,3],
)

df2 = pd.DataFrame({
	"A": ["A4", "A5", "A6", "A7"],
    "B": ["B4", "B5", "B6", "B7"],
    "C": ["C4", "C5", "C6", "C7"],
    "D": ["D4", "D5", "D6", "D7"]
},
	index = [4, 5, 6, 7],
)

df3 = pd.DataFrame({
	"A": ["A8", "A9", "A10", "A11"],
    "B": ["B8", "B9", "B10", "B11"],
    "C": ["C8", "C9", "C10", "C11"],
    "D": ["D8", "D9", "D10", "D11"]
},
	index = [8, 9, 10, 11],
)

result = pd.concat([df1, df2, df3])

df4 = pd.DataFrame({
    "B": ["B2", "B3", "B6", "B7"],
    "D": ["D2", "D3", "D6", "D7"],
    "F": ["F2", "F3", "F6", "F7"]
},
	index = [2,3,6,7],
)

result = pd.concat([df1, df4]) # 없는 값은 NaN으로 채워짐. 두 개의 데이터프레임을 합치면 기존의 인덱스들이 그대로 유지
result = pd.concat([df1, df4], ignore_index = True) # 인덱스가 초기화됨.
result = pd.concat([df1, df4], axis=1) # 열 방향으로 데이터를 합치라는 의미. 열 방향으로 합칠 때는 행 인덱스를 기준으로 합침
# concat() 함수는 default로 합집합 형태로 합쳐짐. 교집합을 기준으로 합치려면 join = inner 인자 추가
# DataFrame에 series를 합칠 수 있습니다.
  • merge: 기준이 되는 열이나 인덱스 즉, 키를 기준으로 두 데이터프레임을 합칩니다.
    • inner join: 양쪽 데이터프레임에서 기준이 되는 열의 데이터가 모두 있는 교집합 부분만 반환
    • left join: 왼쪽 데이터프레임은 유지가 되며, 오른쪽 데이터프레임이 키를 기준으로 합쳐짐
    • right join: 오른쪽 데이터프레임이 유지가 되며, 왼쪽 데이터프레임이 키를 기준으로 합쳐짐.
    • outer join: 데이터프레임 중 어느 한 쪽에만 속하더라도 상관없이 합집합 부분을 반환
DataFrame.merge(left, right, on="기준 열 이름") # inner join
DataFrame.merge(left, right, on= "기준 열 이름", how = 'left') # left join
DataFrame.merge(left, right, on= "기준 열 이름", how = 'right') # right join
DataFrame.merge(left, right, on= "기준 열 이름", how = 'outer') # outer join. 빈 값은 NaN
DataFrame.merge(left, right, left_on = "왼쪽 데이터프레임 기준 열 이름", right_on = "오른쪽 데이터프레임 기준 열 이름", how="inner") # 왼쪽, 오른쪽 데이터프레임의 기준 열을 다르게 설정하고 싶을 경우

left.merge(rihgt, left_on = "왼쪽 데이터프레임 기준 열 이름", right_on = "오른쪽 데이터프레임 기준 열 이름", how = 'inner') # 이런 식으로 한 데이터 프레임을 기준으로 간략하게 사용가능
  • join: 행 메서드를 기준으로 결합
import pandas as pd

left = pd.DataFrame({
	"A": ["A0", "A1", "A2", "A3"],
    "B": ["B0", "B1", "B2", "B3"]},
    index=["K0","K1","K2","K3"]
)

right = pd.DataFrame({
	"A": ["A0", "A1", "A3", "A4"],
    "B": ["B0", "B1", "B3", "B4"]},
    index=["K0","K1","K3","K4"]
)

result = left.join(right) # 인덱스를 기준으로 데이터 프레임이 붙는다.

 

- 데이터 재구조화

  • melt : ID 변수를 기준으로 원본 데이터프레임의 열 이름들을 variable 열에, 각 열에 있던 데이터는 value 열에 넣어 아래로 긴 형태로 만듦
  • pivot_table: 엑셀의 피벗 테이블과 비슷. index: 행 인덱스, columns: 열 인덱스, values: 데이터 값, aggfunc: 데이터 집계 함수
  • stack: 열 인덱스를 행 인덱스로 변환
  • unstack: 행 인덱스를 열 인덱스로 변환

 

- 데이터프레임에 함수 적용

  • apply: 시리즈나 데이터프레임의 개별 원소에 함수를 적용할 수 있습니다. (사용자가 직접 만든 함수, lambda함수도 적용 가능)
    • 각 열에 적용: DataFrame.apply(함수) 또는 DataFrame.apply(함수, axis = 0)
    • 각 행에 적용: DataFrame.apply(함수, axis = 1)

 

- 그룹 연산

데이터를 특정 기준에 따라 그룹으로 나눈 후 처리하는 작업. 일반적으로 다음 세 단계를 거칩니다.

  1. 분할(split): 데이터를 특정 기준에 따라 분할. groupby()
  2. 적용(apply): 데이터를 집계, 변환, 필터링하는 메서드 적용. 사용자가 함수를 직접 만든 후 그룹 객체에 적용할 때는 agg(). agg() 메서드를 이용할 경우 그룹 별로 연산을 위한 함수를 적용. tranform() 메서드를 이용할 경우 그룹 별로 함수를 적용하는 것은 agg()와 동일하지만 그 결과를 본래의 행 인덱스와 열 인덱스를 기준으로 반환. apply()를 통해 그룹별로 전체에 적용가능
  3. 결합(combine): 적용의 결과를 하나로 결합

 

- 시계열 데이터 다루기

시계열 데이터: 시간을 기준으로 측정된 자료. 주가나 재무재표 등이 해당

  • to_datetime: datetime 타입으로 변경
728x90
반응형