[Pandas] 외부 파일 불러오고 내보내기

2024. 1. 8. 13:51Pandas

이번에는 Pandas를 이용해서 외부 파일(csv, xlsx 등)을 읽어오는 방법에 대해서 정리해보고자 합니다. 우선 데이터를 배포하면 대부분 .csv(comma-separated values)가 확장자인 경우가 많은데,  csv파일부터 시작해 보겠습니다.

https://github.com/ghkstod/TIL/blob/main/ipynb/24-01-05PandasFile.ipynb

+

https://github.com/ghkstod/TIL/blob/main/ipynb/24-01-08pandasdatamerge.ipynb

1.CSV파일 불러오고 내보내기

 

CSV파일은 read_csv() 메서드를 이용하여 가능합니다. 사용방법은 df_name=pd.read_csv('file path')입니다.

저는 주피터 노트북과 코랩에서 작업을 많이 하는데 주피터 노트북을 기준으로는 우측 탭에서 폴더모양을 선택해 원하는 csv파일의 경로를 복사할 수 있습니다.

그래서 해당 파일을 불러오는 코드는 이렇게 작성할 수 있습니다.

df=pd.read_csv('playground-series-s4e1/sample_submission.csv')
df

파일의 경로는 컴퓨터마다 다르기 때문에 확인이 필수입니다.  지금은 데이터에 숫자와 영어로만 이루어졌기 때문에 파일경로만 써줬어도 데이터를 불러오는데 성공한 모습을 볼 수 있습니다. 하지만 데이터에 한글이 포함되어 있다면 경로만으로는 에러가 날 확률이 높습니다. 이 예시는 구글 코랩에서 진행하겠습니다. 구글 코랩도 마찬가지로 우측 폴더그림을 선택하여 경로 복사를 할 수 있습니다.

여기에서도 마찬가지로 read_csv()를 써서 작성해보면..

에러가 발생합니다. 이유는 'utf-8' 코덱은 decode할 수 없다. 읽을 수 없다고 합니다. 그래서 읽을 수 있는 인코더를 지정을 해줘야합니다. 보통 'cp949'를 쓴다면 해결 할 수 있습니다. 인코더 설정은 encoding=' '으로 가능합니다.

df=pd.read_csv('/content/drive/MyDrive/보건의료/beverage.csv',encoding='cp949')
df.head()

그러면 이렇게 잘 불러와지는 것을 볼 수 있습니다. 잠깐 이 데이터에 대해서 말하면 학부 시절 보건의료빅데이터분석이라는 강의를 들으면서 학생들끼리 임상실험 비슷한 것을 하면서 만든 데이터인데 나중에 전체적으로 데이터를 전처리하고 시각화하는 글을 써보겠습니다.

 

다음은 불러왔는데 이상하게 불러와지는 경우입니다. 분명 파일은 csv이지만 데이터들이 comma로 구분이 되어있지 않은 것들이 종종 존재합니다. 이건 제가 간단하게 만든 데이터인데 확실히 ,로 구분되어 있어 보이진 않습니다.

 

이것을 그냥 read_csv()로 불러오면 이러한 결과가 나옵니다.

컬럼명 사이에 \t가 보이고 value들 사이에도 보입니다. \t는 탭을 나타내며 데이터들 사이에 탭으로 구분되어있다는 이야기 입니다. 그래서 파일을 읽을 때도 구분자를 탭으로 한다고 설정한다면 읽어올 수 있습니다. 구분자는 sep=''으로 합니다.

septest=pd.read_csv('septest.csv',sep='\t')
septest

 

파일을 내보내는 방법은 간단합니다. to_csv('file path') 를 이용해서 가능합니다.

septest.to_csv('data/septest.csv')

해당 폴더에 들어가면 잘 생성된 것을 확인 할 수 있습니다.

 

2.xlsx 파일 불러오기

 

csv파일을 불러오는 방법과 아주 비슷합니다. csv가 excel로 바뀐다는 점과 라이브러리 하나를 추가해야한다는 점 이외엔 불러오는 방법은 동일합니다. 우선 라이브러리 설치부터 보겠습니다. 엑셀 파일을 읽기 위해서는 openpyxl이라는 라이브러리가 필요합니다.

!pip install openpyxl

conda install openpyxl

환경에 따라 두 개를 선택해서 라이브러리 설치가 가능합니다.

 

그리고 엑셀파일은 이렇게 불러올수 있습니다.

엑셀파일은 인코딩 설정을 안해줘도 한글을 잘 불러오는 모습입니다.

 

파일 불러오고 내보내고 하는 것은 어려운 것은 하나도 없지만 꼬이게 되면 좀 고생을 해야하는 부분이 좀 있습니다. 어떤 데이터 였는지는 기억이 안나는데 코덱 오류가 나서 'cp949'를 이용하면 되겠다 싶었는데 안된적이 있습니다.. 이 때 인코더만 엄청 찾아봤던 기억이 있습니다.

'Pandas' 카테고리의 다른 글

[Pandas] DataFrame 병합,연결,결합  (1) 2024.01.08
[Pandas] iloc vs loc의 차이  (1) 2024.01.08
[Pandas] 기초 문법  (0) 2024.01.06