반응형
데이터프레임 연결
- 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")
▶ 데이터 프레임의 교집합을 불러옵니다.
# 교집합
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 |