Python, Pandas, DataFrame을 이용한 여러 데이터프레임 연결
해결 방법:
pd.concat()
함수 사용:- 가장 일반적인 방법
- 축(axis)을 기준으로 연결
ignore_index
옵션으로 기존 인덱스 무시 가능
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'C': [5, 6], 'D': [7, 8]})
# 열 기준 연결
df_concat_h = pd.concat([df1, df2], axis=1)
# 행 기준 연결
df_concat_v = pd.concat([df1, df2], axis=0)
# 기존 인덱스 무시
df_concat_v_ignore_index = pd.concat([df1, df2], axis=0, ignore_index=True)
print(df_concat_h)
# A B C D
# 0 1 3 5 7
# 1 2 4 6 8
print(df_concat_v)
# A B C D
# 0 1 3 5 7
# 1 2 4 6 8
# 2 5 6 7 8
print(df_concat_v_ignore_index)
# 0 1 2 3
# 0 1 3 5 7
# 1 2 4 6 8
df.append()
메서드 사용:
- DataFrame 끝에 다른 DataFrame 추가
df3 = df1.append(df2)
# 기존 인덱스 무시
df3 = df1.append(df2, ignore_index=True)
print(df3)
# A B C D
# 0 1 3 NaN
# 1 2 4 NaN
# 2 5 6 7.0
# 3 6 8 8.0
pd.merge()
함수 사용:
- 공통 열 기준으로 두 DataFrame 합병
on
옵션으로 합병 기준 열 지정
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4], 'C': ['a', 'b']})
df2 = pd.DataFrame({'D': [5, 6], 'E': [7, 8], 'C': ['a', 'b']})
df_merged = pd.merge(df1, df2, on='C')
print(df_merged)
# A B C D E
# 0 1 3 a 5 7
# 1 2 4 b 6 8
사용 예시:
- 여러 CSV 파일을 하나의 DataFrame으로 합치기
- 데이터 분석 시 여러 데이터 출처 연결
- 데이터 시각화 시 여러 데이터 세트 병합
예제 코드
pd.concat() 함수 사용
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'C': [5, 6], 'D': [7, 8]})
df_concat_h = pd.concat([df1, df2], axis=1)
print(df_concat_h)
출력 결과:
A B C D
0 1 3 5 7
1 2 4 6 8
2 행 기준 연결
df_concat_v = pd.concat([df1, df2], axis=0)
print(df_concat_v)
A B C D
0 1 3 5 7
1 2 4 6 8
2 5 6 7 8
3 기존 인덱스 무시
df_concat_v_ignore_index = pd.concat([df1, df2], axis=0, ignore_index=True)
print(df_concat_v_ignore_index)
0 1 2 3
0 1 3 5 7
1 2 4 6 8
df.append() 메서드 사용
1 기존 인덱스 유지
df3 = df1.append(df2)
print(df3)
A B C D
0 1 3 NaN
1 2 4 NaN
2 5 6 7.0
3 6 8 8.0
df3 = df1.append(df2, ignore_index=True)
print(df3)
0 1 2 3
0 1 3 5 7
1 2 4 6 8
pd.merge() 함수 사용
1 공통 열 기준 합병
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4], 'C': ['a', 'b']})
df2 = pd.DataFrame({'D': [5, 6], 'E': [7, 8], 'C': ['a', 'b']})
df_merged = pd.merge(df1, df2, on='C')
print(df_merged)
A B C D E
0 1 3 a 5 7
1 2 4 b 6 8
Python, Pandas, DataFrame을 이용한 여러 데이터프레임 연결 - 대체 방법
def concat_dataframes(df_list):
"""
데이터프레임 목록을 하나의 데이터프레임으로 연결하는 함수
Args:
df_list: 데이터프레임 목록
Returns:
연결된 데이터프레임
"""
result_df = pd.DataFrame()
for df in df_list:
result_df = result_df.append(df)
return result_df
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'C': [5, 6], 'D': [7, 8]})
df_list = [df1, df2]
df_concat = concat_dataframes(df_list)
print(df_concat)
A B C D
0 1 3 5 7
1 2 4 6 8
itertools.chain() 사용:
from itertools import chain
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'C': [5, 6], 'D': [7, 8]})
df_concat = pd.DataFrame(list(chain(df1.values, df2.values)))
print(df_concat)
0 1 2 3
0 1 3 5 7
1 2 4 6 8
numpy.concatenate() 사용:
import numpy as np
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'C': [5, 6], 'D': [7, 8]})
df_concat = pd.DataFrame(np.concatenate([df1.values, df2.values], axis=1))
print(df_concat)
A B C D
0 1 3 5 7
1 2 4 6 8
pd.read_csv() 함수 사용 (CSV 파일 연결)
import glob
# 모든 CSV 파일을 읽어 리스트에 저장
csv_files = glob.glob('data/*.csv')
df_list = []
for csv_file in csv_files:
df_list.append(pd.read_csv(csv_file))
# 리스트의 데이터프레임 연결
df_concat = pd.concat(df_list)
print(df_concat)
for
루프: 가장 간단하지만, 속도가 느릴 수 있음itertools.chain()
:for
루프보다 빠르지만, 메모리 사용량이 증가할 수 있음numpy.concatenate()
: 가장 빠르지만, 데이터프레임의 인덱스 정보가 손실될 수 있음pd.read_csv()
: CSV 파일을 연결할 때 유용
- 여러 웹 API 응답을 하나의 데이터프레임으로 합치기
주의:
- 연결하려는 데이터프레임의 열 이름과 순서가 일치해야 함
- 데이터 유형이 일치해야 함
python pandas dataframe