Python

[Python] 데이터 프레임 연결

SangRok Jung 2022. 10. 6. 16:39
반응형

데이터프레임 연결


  • concat()
  • merge()
  • join()

 

 

 

▶ concat()

  • DataFrame의 구성 형태와 속성이 같다면 컬럼/로우 중 어느 한 방향이라도 이어 붙여도 데이터의 일관성이 유지됩니다.
  • 데이터 프레임의 형태를 유지하며 이어 붙이는 개념.

 

 

▷ 기본구문

pandas.concat(DataFrame)

 

 

 

 

▷ 데이터 프레임을 생성합니다.

df1 = pd.DataFrame({'a': ['a0','a1','a2','a3'],
                    'b': ['b0','b1','b2','b3'],
                    'c': ['c0','c1','c2','c3']},
                    index=[0, 1, 2, 3])

df2 = pd.DataFrame({'a': ['a2', 'a3', 'a4', 'a5'],
                    'b': ['b2', 'b3','b4', 'b5'],
                    'c': ['c2', 'c3', 'c4','c5'],
                    'd': ['d2', 'd3', 'd4', 'd5']},
                    index=[2, 3, 4, 5])

 

 

▷ 컬럼을 이어 붙입니다.

같은 컬럼명이 중복 허용됩니다.

기본 합집합의 속성이 있습니다.

# 행을 추가합니다.
pd.concat([df1, df2], axis=0, ignore_index=True)
# ignore_index 기존의 인덱스를 무시합니다.

▷ 컬럼을 이어 붙입니다.

# 컬럼을 추가합니다.
pd.concat([df1, df2], axis=1)

 

 

▷ 컬럼을 이어 붙이며 교집합의 로우만을 형성합니다.

pd.concat([df1, df2], axis=1, join='inner')
# join='inner' = 교집합

 

 

 

▷ 기존의 컬럼을 무시, 교집합 로우만 허용한 상태로 컬럼을 추가합니다.

pd.concat([df1, df2], axis=1, join='inner', ignore_index=True)
# join='inner' = 교집합
# ignore_index=True 기존의 컬럼을 무시합니다.

 

 


 

 

 

▷ 데이터를 가져옵니다.

sr1 = pd.Series(["e0", "e1", "e2", "e3"], name="e")
sr2 = pd.Series(["f0", "f1", "f2"], name="f", index=[3, 4, 5])
sr3 = pd.Series(["g0", "g1", "g2", "g3"], name="g")

 

▷ 컬럼을 연결합니다.

# 컬럼 연결
pd.concat([df1, sr1], axis=1)

# 컬럼 연결
pd.concat([df2, sr2], axis=1)

# 컬럼 연결
pd.concat([sr1, sr3], axis=1)

 

 

▷ 로우를 연결합니다.

# 로우 연결 
pd.concat([sr1, sr3], axis=0)

 

 

 

 

▶ merge()

  • SQL과 join명령과 비슷한 구조로 움직입니다.
  • 기준에 의해 두 데이터 프레임을 병합합니다.
  • 기준이 되는 컬럼(key)이 양쪽 데이터 프레임에 존재해야합니다.

 

▷ 기본 구문

pandas.merge(df_left, df_right, how='inner', on=none)

 

 

 

▶ 데이터를 불러옵니다.

df_sp = pd.read_excel("./stock price.xlsx")
df_sv = pd.read_excel("./stock valuation.xlsx")

stock price.xlsx
0.01MB
stock valuation.xlsx
0.01MB

 

 

 

 

▶ 데이터 프레임의 교집합을 불러옵니다.

# 교집합
pd.merge(df_sp, df_sv, how='inner')

 

 

▶ 데이터 프레임의 합집합을 불러옵니다.

how 옵션을 사용하여 'outer'를 설정합니다.

# 합집합
pd.merge(df_sp, df_sv, how='outer', on='id')

 

 

 

▶ df_sp 데이터 프레임을 기준으로 불러옵니다.

# df_sp 기준
# left join
# left 데이터의 보존
# 같은 데이터지만 컬럼명만 다른 상황.
pd.merge(df_sp, df_sv, how='left', left_on='stock_name', right_on='name') # df_sp 기준
pd.merge(df_sp, df_sv, left_on='id', right_on='id')

 

 

 

▶ df_sv 데이터 프레임을 기준으로 불러옵니다.

# df_sp 기준
# right join
# right 데이터의 보존 
# 같은 데이터지만 컬럼명만 다른 상황.
pd.merge(df_sp, df_sv, how='right', left_on='stock_name', right_on='name')# df_sv 기준
pd.merge(df_sv, df_sp, left_on='id', right_on='id')

 

 

 

▶ df_sp의 price컬럼의 5000미만의 데이터 프레임과 df_sv의 교집합을 불러옵니다.

pd.merge(df_sp.loc[df_sp['price'] < 5000], df_sv)

 

 

 

 

 

▶ join()

  • merge()와 작동 방식이 유사합니다.
  • 컬럼 인덱스를 기준으로 결합합니다.

 

▷ 기본 구문

df_left.join(df_right, how='left')

 

 

 

▶ 각 데이터 프레임의 공통된 인덱스를 설정한 후 join()을 실행합니다.

df_sp.set_index("id").join(df_sv.set_index("id"), how='left')

 

 

반응형

'Python' 카테고리의 다른 글

[Python] Pivot Table  (0) 2022.10.06
[Python] 그룹연산  (0) 2022.10.06
[Python] Boolean Indexing  (0) 2022.10.06
[Python] 컬럼 순서 변경  (0) 2022.10.06
[Python] DataFrame  (0) 2022.10.06