목차
특정 경로 내 CSV 파일들을 하나의 DF로 합치기(병합하기)
같은 형태를 가진 csv가 여러개로 나뉘어 있을 때, 하나로 작업하기 위해 필요한 코드입니다.
import pandas as pd
import os
# CSV 파일이 저장된 디렉터리 경로
directory = "/Users/david/Documents/project/final_data_set"
# CSV 파일을 하나의 df로 병합
def merge_csv_files(directory):
# CSV 인 것들만 리스트로 만듦
csv_files = [f for f in os.listdir(directory) if f.endswith('.csv')]
dfs = []
# csv_files라는 리스트를 돌면서 csv 파일을 df로 변환한 뒤, 다시 dfs라는 이름의 리스트에 저장
for csv_file in csv_files:
file_path = os.path.join(directory, csv_file)
df = pd.read_csv(file_path)
dfs.append(df)
# 모든 df 병합
merged_df = pd.concat(dfs, ignore_index=True)
return merged_df
# 병합된 df
merged_df = merge_csv_files(directory)
# 결과 출력
print(merged_df.head())
# 병합된 df를 csv로 다시 저장
merged_df.to_csv("/Users/david/Documents/project/merged_file.csv", index=False)
df에 계속 추가하는 append 방식을 생각했었는데, 이제 df.append는 작동이 안 되는 것 같습니다.
AttributeError: 'DataFrame' object has no attribute 'append'라는 오류를 반환하네요. (아래 사진 참고)
리스트에는 append가 문제 없이 작동합니다!
Concat 이해하기
concat은 pd.concat()과 같은 형태로 사용합니다.
① () 안에는 시리즈나 데이터프레임만 넣을 수 있다고 합니다.
(only Series and DataFrame objs are valid)
결과물은 넣은 값에 시리즈나 데이터프레임으로 나옵니다.
시리즈와 데이터프레임을 합칠 수도 있는데, 그때는 데이터프레임으로 반환됩니다.
② 기본적으로는 쭉 아래로(행 기준으로) 합쳐집니다.
데이터프레임 기준에서 열이 같다면, 예시 1처럼 빈값 없이 쭉 합쳐집니다.
열이 다르면, 예시 2처럼 서로 안맞는 위치에는 NaN으로 채워지면서 쭉 아래로 합쳐집니다.
이는 concat의 합치는 방향의 디폴트 값이 아래 방향이기 때문입니다.
만약, 오른쪽으로 쭉 이어붙이고 싶다면(열 기준으로) axis=1로 설정해줍니다.
예시 1과 같이 pd.concat(dfs)는 똑같은데 ()안에 axis=1을 추가해줬더니 옆으로 추가됐습니다.
③ 합친 데이터들을 전부 표시해줍니다.
예시 2에서 본 것처럼 모든 데이터를 표시하려고 하다보니 NaN도 표시가 됩니다.
만약 합치는 데이터 간에 공통된 것만 보고 싶다면 join을 활용할 수 있습니다.
예시 2에서 join = 'inner'만 추가했더니 NaN이 있었던 test 열이 사라졌습니다.
④ 인덱스는 수정하고 싶으면 수정해야 합니다.
예시 1과 예시 2를 눈썰미 있게 보셨다면, 인덱스에도 차이가 있다는 것을 보셨을텐데요.
예시 1은 인덱스가 0,1,0,1인 반면, 예시 2는 0,1,2,3입니다.
이처럼 concat은 기본적으론 합쳤을 때 인덱스를 안 고쳐줍니다.
그래서 필요한 경우에 ignore_index = True를 사용해서 고쳐주셔야 합니다.
'파이썬 > 파이썬 궁금증 회고' 카테고리의 다른 글
pandas dataframe 열 사이에 열 추가하기(열 순서 바꾸기) (1) | 2024.07.24 |
---|---|
파이썬 pandas - 데이터프레임에서 결측된 값, 결측된 행 찾기 (0) | 2024.07.23 |
아나콘다 가상환경에서 파이썬 라이브러리 설치 안될 때 (0) | 2023.10.17 |
.py와 .ipynb에서 같은 파일 사용하기(같은 파일 경로 사용하기), 다른 컴퓨터에서 같은 파일 사용하기 (0) | 2023.05.12 |
파이썬 SettingWithCopyWarning과 FutureWarning 해결하기: Pandas DataFrame에서 .copy() 사용 및 numeric_only 지정 (0) | 2023.04.18 |
댓글