안녕하세요~~ 꽁냥이에요!
저번 포스팅에서는 Pandas에서 DataFrame을 생성하는 방법에 대해서 알아보았습니다. 실무에서는 DataFrame을 직접 생성하지 않고 외부 데이터 파일을 읽어서 이를 DataFrame으로 만들어주는 작업을 더 많이 하지요. 그리고 전처리 과정을 거친 데이터 또는 데이터 분석 결과를 외부에 파일 형태로 저장하기도 합니다.
데이터를 저장하는 파일 형식 중에 하나로 텍스트(txt) 파일이 있습니다. 텍스트 파일에 데이터를 저장할 때에는 기본적으로 구분자를 함께 넣어줍니다. 구분자는 쉼표나 세미콜론 또는 tab이 될 수 있지요.
파이썬(Python)에서는 '텍스트 파일 읽기/쓰기'에 대한 방법이 여러가지가 있어요. Pandas에서도 텍스트를 읽고 저장하는 함수를 제공하고 있는데요.
이번 포스팅에서는 Pandas를 이용하여 텍스트 파일을 불러오고 저장하는 방법에 대해서 알아보려고 해요. 여기서 다루는 내용은 다음과 같아요.
2. 데이터 프래임(DataFrame)을 텍스트 파일로 저장하기
'텍스트 파일 불러오기'와 '텍스트 파일 읽기'라는 말은 같은 것으로 간주하여 이를 혼용해서 쓰도록 하겠습니다.
1. 텍스트 파일 읽기(불러오기)
여기서는 텍스트 파일안에 헤더 또는 칼럼 이름이 있는 경우와 없는 경우에 대해서 나눠서 설명하겠습니다.
먼저 헤더가 있는 경우에 대해서 살펴 보겠습니다. 꽁냥이는 다음과 같은 텍스트 파일을 불러오려고 합니다.
번호,이름,성별,비고
1,아이린,여자,존예
2,박보검,남자,존잘
3,유민상,남자,재미있음
4,꽁냥이,남자,착함
위의 텍스트가 저장되어 있는 파일 이름을 data.txt라고 하겠습니다. 혹시 필요하신 분은 아래에 첨부할 테니 다운로드하여주세요.
이제 데이터를 불러볼게요. 아래 코드를 살펴보겠습니다.
## with header
import pandas as pd
df = pd.read_table('./data.txt',sep=',') ## 경로는 각자 상황에 맞게 넣어주세요
line 4
텍스트 파일을 읽기 위해 read_table 함수를 호출합니다. 이 함수에는 파일 이름을 포함한 경로를 넣어주고 sep인자에는 구분자를 기본적으로 넣어줘야 합니다. 여기서는 쉼표로 구분되어 있으므로 쉼표를 sep인자에 넣어줍니다. 참고로 read_table에서 sep의 기본값은 탭('\t')입니다.
데이터를 잘 불러왔는지 살펴볼까요?
또한 텍스트 파일은 read_csv 함수를 이용해서 불러올 수도 있습니다. 아래 코드는 위의 코드와 동일합니다.
## with header
import pandas as pd
df = pd.read_csv('./data.txt') ## 경로는 각자 상황에 맞게 넣어주세요
line 4
read_csv 함수를 호출할 때 파일의 경로를 넣어줍니다. read_csv는 sep인자의 기본값이 쉼표라서 sep인자는 생략했습니다.
※ 참고
read_csv와 read_table의 차이점은 read_csv는 기본 구분자가 쉼표(,)이고 read_table은 기본 구분자가 탭(\t)이라는 차이점이 있고요. 성능면에서 차이는 없습니다.
이번에는 헤더가 없는 경우에 텍스트 파일을 읽어오겠습니다. 텍스트 파일이 다음과 같다고 할게요. 위에서 본 파일에서 맨 위에 칼럼 이름만 쏙 뺐어요.
1,아이린,여자,존예
2,박보검,남자,존잘
3,유민상,남자,재미있음
4,꽁냥이,남자,착함
위의 텍스트가 저장되어 있는 파일 이름을 data_no_header.txt라고 하겠습니다. 혹시 필요하신 분은 아래에 첨부할 테니 다운로드하여주세요.
헤더가 없는 경우에는 read_table 함수에서 header 인자에 None을 넣어주고, names를 이용하여 칼럼 이름을 지정해줘야 합니다. 아래 코드를 살펴보겠습니다.
## with no header
import pandas as pd
## 경로는 각자 상황에 맞게 넣어주세요
df = pd.read_table('./data_no_header.txt',sep=',',header=None,names=['번호','이름','성별','비고'])
line 4
파일 경로와 구분자를 입력하는 것은 앞서 본 것과 동일하고요. 여기서 header에 None을 넣어주고 names에 칼럼 이름이 담긴 리스트를 넣어주었습니다.
위 코드를 실행해보면 앞서 본 것과 동일하게 나옵니다. 또한 아래와 같이 read_csv를 이용하여 불러올 수도 있습니다.
## with no header
import pandas as pd
## 경로는 각자 상황에 맞게 넣어주세요
df = pd.read_csv('./data_no_header.txt',header=None,names=['번호','이름','성별','비고'])
2. 데이터 프래임(DataFrame)을 텍스트 파일로 저장하기
만약 데이터를 텍스트 파일로 저장하고 싶다면 to_csv 함수를 이용해야 합니다. 코드를 통해서 설명드리겠습니다.
import pandas as pd
## 데이터 생성
data = {
'번호':[1,2,3,4],
'이름':['아이린','박보검','유민상','꽁냥이'],
'성별':['여자','남자','남자','남자'],
'비고':['존예','존잘','재미있음','착함']
}
df = pd.DataFrame(data) ## 데이터프래임 생성
df.to_csv('test.txt',index=False,sep='\t') ## 구분자를 탭으로 하여 저장. 인덱스칼럼은 저장 안함.
line 3~9
딕셔너리를 이용하여 앞서 보았던 데이터를 생성해줍니다. 데이터 프래임을 생성하는 방법에 대해서는 여기를 참고하세요.
line 10
먼저 저장할 경로와 파일 이름을 정하셔야 해요. 꽁냥이는 현재 디렉토리에 text.txt라는 이름으로 저장할 거예요. 그리고 index인자에는 False를 넣어줘서 인덱스 칼럼은 저장되지 않도록 합니다. 그리고 구분자는 탭을 사용해보고 싶어서 sep인자에는 '\t'을 넣어주었습니다.
위 코드를 실행하고 text.txt 파일을 열어 보시면 아래와 같이 예쁘게 저장되어 있을 거예요.
만약 헤더(칼럼 이름)는 빼고 싶다면 to_csv에서 header인자를 None으로 주면 됩니다. 아래 코드는 헤더를 제외하여 저장하는 코드입니다.
import pandas as pd
## 데이터 생성
data = {
'번호':[1,2,3,4],
'이름':['아이린','박보검','유민상','꽁냥이'],
'성별':['여자','남자','남자','남자'],
'비고':['존예','존잘','재미있음','착함']
}
df = pd.DataFrame(data) ## 데이터프래임 생성
df.to_csv('test.txt',header=None,index=False,sep='\t') ## 구분자를 탭으로 하여 저장. 인덱스칼럼은 저장 안함.
이번 포스팅에서는 텍스트 파일로 되어있는 데이터를 읽는 방법과 데이터를 텍스트 파일로 저장하는 방법에 대해서 알아보았습니다. 궁금한 점, 잘못된 점, 하고 싶은 말은 댓글로 남겨주세요.
지금까지 꽁냥이의 글 읽어주셔서 감사합니다.~
'데이터 분석 > 데이터 전처리' 카테고리의 다른 글
[Pandas] 6. 특정 문자를 포함하는/특정 문자와 일치하는 행 추출하기 (10) | 2020.09.06 |
---|---|
[Pandas] 5. 데이터프래임(DataFrame) 모든 행, 모든 열 출력하기 (4) | 2020.08.31 |
[Pandas] 4. 필요한 열(Column) 추출하기 (4) | 2020.08.26 |
[Pandas] 3. csv 파일 불러오기/저장하기 (2) | 2020.08.25 |
[Pandas] 1. DataFrame 생성하기 (0) | 2020.07.30 |
댓글