여러 CSV 파일을 Pandas로 가져오고 하나의 DataFrame으로 연결
이 튜토리얼은 여러 .csv
파일을 읽고 모든 DataFrame을 하나로 연결하는 방법에 관한 것입니다.
이 튜토리얼에서는 Pandas를 사용하여 데이터 파일을 읽고 DataFrame을 만들고 결합합니다.
판다는 무엇인가
이 패키지에는 다양한 데이터 파일을 읽고 데이터 조작 기술을 수행하는 다양한 기능이 포함되어 있습니다.
컴퓨터에 pandas
패키지를 설치하려면 명령 프롬프트/터미널을 열고 pip install pandas
를 실행해야 합니다.
Pandas를 사용하여 단일 .csv
파일을 읽는 방법
pandas
패키지는 .csv
파일을 읽는 기능을 제공합니다.
>>> import pandas as pd
>>> df = pd.read_csv(filepath_or_buffer)
파일 경로가 주어지면 pandas
함수 read_csv()
가 데이터 파일을 읽고 개체를 반환합니다.
>>> type(df)
<class 'pandas.core.frame.DataFrame'>
Python에서 여러 CSV 파일 읽기
pandas
모듈만 사용하여 이 작업을 수행하는 명시적 기능이 없습니다. 그러나 다음을 수행하기 위한 합리적인 방법을 고안할 수 있습니다.
먼저 모든 데이터 파일의 경로가 필요합니다. 모든 파일이 하나의 특정 폴더에 있으면 쉬울 것입니다.
모든 파일의 경로와 이름이 저장될 목록을 만듭니다.
>>> import pandas as pd
>>> import glob
>>> import os
>>> # This is a raw string containing the path of files
>>> path = r'D:\csv files'
>>> all_files = glob.glob(os.path.join(path, '*.csv'))
>>> all_files
['D:\\csv files\\FILE_1.csv', 'D:\\csv files\\FILE_2.csv']
위의 코드에서 파일 경로를 포함하는 목록이 생성됩니다.
glob
모듈
glob
모듈을 사용하여 패턴과 일치하는 파일 또는 경로 이름을 찾으십시오. glob
은 표준 Unix 경로 확장 규칙을 따라 패턴을 일치시킵니다.
이 모듈은 이미 Python에 포함되어 있으므로 외부에 설치할 필요가 없습니다. 그러나 이 패키지가 없으면 pip install glob2
를 입력하면 됩니다.
디렉토리/파일 및 하위 디렉토리/하위 파일 내에서 경로를 재귀적으로 검색하기 위해 glob
모듈의 함수 glob.glob()
및 glob.iglob()
을 활용할 수 있습니다.
통사론:
glob.glob(pathname, *, recursive=False)
glob.iglob(pathname, *, recursive=False)
이 함수는 모든 파일의 경로를 포함하는 목록을 반환합니다.
예를 들어 지정된 경로에서 모든 파일 이름을 검색하려면 경로 끝에 별표 기호 *
를 사용하여 glob.glob('')
함수에 문자열로 전달합니다.
>>> for files in glob.glob(r'D:\csv files\*'):
print(files)
D:\csv files\FILE_1.csv
D:\csv files\FILE_2.csv
D:\csv files\textFile1.txt
D:\csv files\textFile2.txt
또한 보다 집중된 검색을 수행하려면 별표 기호 뒤에 파일 확장자를 지정하십시오.
>>> for files in glob.glob(r'D:\csv files\*.csv'):
print(files)
D:\csv files\FILE_1.csv
D:\csv files\FILE_2.csv
원시 문자열이란 무엇입니까
Python에서 원시 문자열은 리터럴 문자열에 r
또는 R
을 추가하여 구성됩니다. 백슬래시(\
)는 Python 원시 문자열의 리터럴 문자입니다.
백슬래시가 있는 문자열을 원하지만 이스케이프 문자로 간주하지 않으려는 경우에 유용합니다.
예를 들어:
탭 및 줄 바꿈과 같은 특수 문자를 나타내기 위해 백슬래시(\
)를 사용하여 이스케이프 시퀀스의 시작을 나타냅니다.
>>> print("This\tis\nnormal\tstring")
This is
normal string
그러나 원시 문자열은 백슬래시(\
)를 리터럴 문자로 취급합니다. 예를 들어:
>>> print(r"This\tis\nnormal\tstring")
This\tis\nnormal\tstring
os
모듈
Python의 os
모듈에는 운영 체제를 처리하기 위한 메서드가 포함되어 있습니다. os
는 Python용 기본 유틸리티 모듈에 포함되어 있습니다.
이 모듈은 운영 체제에 따라 기능을 사용하는 이식 가능한 방법을 제공합니다. os
모듈의 하위 모듈인 Python의 os.path
모듈은 공통 경로 이름을 조작하는 데 사용됩니다.
Python의 os.path.join()
함수는 하나 이상의 경로 구성 요소를 지능적으로 연결합니다. 마지막 경로 구성 요소를 제외하고 이 접근 방식은 비어 있지 않은 각 부분 뒤에 정확히 하나의 디렉터리 구분 기호 ("/")
를 배치하여 서로 다른 경로 구성 요소를 연결합니다.
링크할 최종 경로 구성 요소가 비어 있는 끝에 디렉터리 구분자 ("/")
가 추가됩니다.
경로 구성 요소가 절대 경로를 나타내는 경우 이전에 연결된 모든 구성 요소가 삭제되고 결합은 절대 경로를 나타내는 구성 요소로 이동합니다.
통사론:
os.path.join(path, *path)
다른 경로 구성 요소를 병합하려면 os.path.join()
기능을 사용하십시오.
import os
path = "Users"
os.path.join(path, "Desktop", "data.csv")
출력:
'Users\\Desktop\\data.csv'
Python에서 여러 DataFrame 연결
더 나아가 glob.glob()
함수에서 반환된 경로를 사용하여 데이터를 가져오고 데이터 프레임을 만듭니다. 그런 다음 Pandas 데이터 프레임 개체도 목록에 추가합니다.
암호:
dataframes = list()
for dfs in all_files:
data = pd.read_csv(dfs)
dataframes.append(data)
데이터 프레임 목록이 생성됩니다.
>>> dataframes
[dataframe1, dataframe2]
데이터 프레임을 연결합니다.
참고: 데이터 프레임을 연결하기 전에 모든 데이터 프레임에 유사한 열이 있어야 합니다.
pd.concat(dataframes, ignore_index=True)
pandas.concat()
메서드는 Pandas 개체 축과 함께 모든 집중적인 연결 작업을 처리하며 다른 축에 있는 인덱스의 논리 작업(합집합 또는 교집합)을 선택적 추가로 설정합니다.
전체 코드:
# importing the required modules
import pandas as pd
import os
import glob
# Path of the files
path = r"D:\csv files"
# joining the path and creating list of paths
all_files = glob.glob(os.path.join(path, "*.csv"))
dataframes = list()
# reading the data and appending the dataframe
for dfs in all_files:
data = pd.read_csv(dfs)
dataframes.append(data)
# Concatenating the dataframes
df = pd.concat(dataframes, ignore_index=True)