Python/Pandas

[Pandas] txt 파일을 데이터프레임으로 여는 방법 정리

jimmy_AI 2022. 4. 2. 13:56
반응형

파이썬 판다스 텍스트 파일을 DataFrame으로 변환 예제

파이썬에서 텍스트 파일을 데이터프레임으로 바꾸는 방법을

text 파싱을 이용한 예시와 read_csv 함수를 이용하여 간단하게 여는 예시로 나누어서

설명해보도록 하겠습니다.

 

예제로 아래와 같은 간단한 텍스트 파일이 student.txt로 저장되어 있다고 가정해보겠습니다.

데이터 간 구분자는 공백을 가정합니다.

 

 

txt file to DataFrame 방법 1 : 텍스트 파싱 후 변환

다소 복잡할 수 있는 방법으로 txt 파일을 연 뒤, 데이터 파싱 과정을 거쳐

데이터프레임으로 변환하는 방법을 먼저 다루어보겠습니다.

 

이 방법은 구분자가 불규칙한 상황 등에서 유용할 수 있습니다.

만일, 구분자가 규칙적이라면 방법 2의 read_csv 함수를 이용한 방법 사용을 권장드립니다.

 

 

Step 1 : txt 파일 열기

먼저, txt 파일의 정보를 readlines 함수를 통해서 리스트 형태로 받아옵니다.

with open('student.txt', 'r') as f:
    data = f.readlines()

print(data)

# 저장된 값
['이름 번호 국어 수학 영어\n',
 'AAA 1000 80 90 95\n',
 'BBB 1001 89 92 88\n',
 'CCC 1002 96 83 97\n',
 'DDD 1003 100 80 87']

 

 

Step 2 : 열 이름 목록 가져오기

column의 이름으로 진행될 첫 줄의 데이터를 split 함수를 통하여 분리해줍니다.

구분자가 공백이 아니라면 split 내에 해당 구분자를 input으로 적어주시면 됩니다.

 

마지막 부분의 줄 바꿈 기호는 strip 함수를 이용하여 제거하겠습니다.

column_name = data[0].strip().split()

print(column_name)
# ['이름', '번호', '국어', '수학', '영어']
반응형

Step 3 : 각 행의 데이터 가져오기

열 이름이 저장되어 있는 첫 행을 제외하고, 두 번째 행부터

각 행마다 저장된 데이터를 불러와서 열 strip, split의 전처리를 진행해줍니다.

data_split = [x.strip().split() for x in data[1:]]

print(data_split)
# [['AAA', '1000', '80', '90', '95'], ['BBB', '1001', '89', '92', '88'], ['CCC', '1002', '96', '83', '97'], ['DDD', '1003', '100', '80', '87']]

 

 

Step 4 : 데이터프레임 변환

각 행 단위로 분할된 데이터가 저장된 리스트(Step 3에서 생성)와

열 이름이 저장된 리스트(Step 2에서 생성)를 pd.DataFrame 함수에 input으로 넣어

최종 데이터프레임을 생성하면 변환이 완료됩니다.

import pandas as pd

df = pd.DataFrame(data_split, columns = column_name)

df

 

 

txt file to DataFrame 방법 2 : read_csv 함수 사용

만일, 각 데이터가 구분되어 있는 구분자가 파일 전체에서 동일한 상황이라면,

read_csv 함수를 이용하며 txt 파일의 데이터프레임 변환이 아주 쉽게 가능합니다.

 

해당 함수의 상세한 사용법의 예시는 아래의 이전 포스팅을 참고해주세요.

 

[Pandas] 파이썬 csv, tsv 파일 읽기, 내보내기 : read_csv, to_csv

파이썬 판다스에서 csv파일로 데이터프레임 만들기 용량에 대한 효율이 좋아 데이터프레임을 저장하고 불러올 때 많이 사용하는 csv파일을 읽어오고 저장할 수 있는 판다스의 read_csv, to_csv 함수

jimmy-ai.tistory.com

 

여기서는 read_csv 파일 내에 해당 txt 파일을 input으로 넣고,

sep 인자를 구분자로 맞추어 함수를 실행시키면 데이터프레임 변환이 완료됩니다.

df = pd.read_csv('student.txt', sep = ' ')

df