Python Library/Pandas

[Pandas - Python] Pandas 라이브러리와 파일 저장 및 열기(excel, csv, txt)

바보1 2022. 2. 5. 01:06

1. excel, csv, txt의 차이

 

excel과 txt는 많은 분들이 아실거라고 생각합니다.

 

csv가 조금 생소하실 수 있는데, csv란 것은 ,(쉼표)로 구분된 값, 일반 텍스트 파일입니다.

 

텍스트들을 쉼표로 구분합니다.

 

이때, text파일 즉 메모장에서 열면

 

이런 형태로 나오지만, csv파일을 excel에서 열면,

 

이런 식으로 나타납니다.

 

쉽게 말해서, excel로도 열 수 있지만, 이미지나 다른게 없이 오로지 텍스트로만 이루어졌기 때문에,

 

csv의 장점은 excel보다는 용량이 작고, 광범위하게 지원되는 것이 장점이고, 단점은 excel에 비해 많은 작업을 할 수 없다는게 단점입니다.


2. 파일 저장

 

  • csv 파일로 저장
df.to_csv('score.csv', encoding='utf-8-sig', index=False)

이렇게 df.to_csv를 하시고, 뒤에 파일 이름을 적어주시면 됩니다.

 

그리고 뒤에 encoding은 왜 하냐면 이게 텍스트 파일에서 열때는 한글이 안 깨지는데, 엑셀 파일에서 열면 한글이 꺠지더라구요.

 

그래서 encoding='utf-8-sig'을 써줘야합니다.

 

그리고 index=False를 해주시면 인덱스는 따로 저장하지 않습니다.

 

excel로 열었을 때

 

메모장으로 열었을 때

 

 

  • txt 파일로 저장
df.to_csv('score.txt', sep='\t')

위에서 말씀드렸다시피 csv는 txt 파일과 excel 둘 다 쓸 수 있기 때문에 to_csv로 저장하시면 됩니다.

 

하지만 뒤에 확장자는 txt로 해주셔야합니다!

 

그리고 csv 파일은 텍스트를 ,(쉼표)로 구분하기 때문에 sep(seperate 구분자)를 '\t' (탭 문자)로 바꿔주시면 txt 파일을 탭 문자로 구별해서 저장합니다!

 

 

 

  • excel 파일로 저장
df.to_excel('score.xlsx')

이번에는 to_excel로 해주시고, 확장자는 xlsx로 해주시면 됩니다.!

 


3. 파일 열기

 

  • csv 파일 열기
df = pd.read_csv('score.csv')
	이름	학교	키	국어	영어	수학	과학	사회	SW특기
0	채치수	북산고	197	90	85	100	95	85	Python
1	정대만	북산고	184	40	35	50	55	25	Java
2	송태섭	북산고	168	80	75	70	80	75	Javascript
3	서태웅	북산고	187	40	60	70	75	80	NaN
4	강백호	북산고	188	15	20	10	35	10	NaN
5	변덕규	능남고	202	80	100	95	85	80	C
6	황태산	능남고	188	55	65	45	40	35	PYTHON
7	윤대협	능남고	190	100	85	90	95	95	C#

위에서 제가 저장할 때, index=False를 한 상태에서 저장했기 때문에, 지원번호는 없습니다!

 

  • 행 무시해서 가져오기(n개의 행, 특정 행, 몇몇 행만 가져오기)

지정된 갯수만큼의 행을 안 쓰고 싶다면,  skiprows = 갯수 이런 식으로 적어주시면 됩니다.

 

그리고 특정한 몇몇 행만 안 쓰고 싶다면, skiprows = [1, 3, 5] 이런 식으로 적어주시면 됩니다.

 

먼저 갯수를 적었을 때를 보겠습니다.

 

df = pd.read_csv('score.csv', skiprows=2)
	정대만	북산고	184	40	35	50	55	25	Java
0	송태섭	북산고	168	80	75	70	80	75	Javascript
1	서태웅	북산고	187	40	60	70	75	80	NaN
2	강백호	북산고	188	15	20	10	35	10	NaN
3	변덕규	능남고	202	80	100	95	85	80	C
4	황태산	능남고	188	55	65	45	40	35	PYTHON
5	윤대협	능남고	190	100	85	90	95	95	C#

이렇게 이름이 있는 행과 채치수의 행을 안 가져오네요.

 

그리고 리스트로 특정한 행만 빼고 가져와보겠습니다.

 

df = pd.read_csv('score.csv', skiprows=[1,3,5])
	이름	학교	키	국어	영어	수학	과학	사회	SW특기
0	정대만	북산고	184	40	35	50	55	25	Java
1	서태웅	북산고	187	40	60	70	75	80	NaN
2	변덕규	능남고	202	80	100	95	85	80	C
3	황태산	능남고	188	55	65	45	40	35	PYTHON
4	윤대협	능남고	190	100	85	90	95	95	C#

이렇게 1, 3, 5번째 행만 빼고 다 가져오는 모습을 볼 수 있습니다!

 

 

마지막으로, 몇몇 행만 가져와보겠습니다. nrows = '갯수'를 사용하면 특정한 갯수의 행만 가져올 수 있습니다.

 

df = pd.read_csv('score.csv', nrows=4)
	이름	학교	키	국어	영어	수학	과학	사회	SW특기
0	채치수	북산고	197	90	85	100	95	85	Python
1	정대만	북산고	184	40	35	50	55	25	Java
2	송태섭	북산고	168	80	75	70	80	75	Javascript
3	서태웅	북산고	187	40	60	70	75	80	NaN

 

이때, 잘 보셔야될 부분이 4개의 행만 가져오려고 했는데, 이름이 있는 컬럼 헤더까지 가져오는 모습을 볼 수 있습니다.

 

nrows를 했을 때, 맨 위의 행은 컬럼 헤더라고 인식하고 가져오고, 나머지 밑에 4개의 행을 가져옵니다.

 

df = pd.read_csv('score.csv', skiprows = 2, nrows=4)

이렇게 쓰면 위의 두 개의 행은 버리고, 밑의 4개의 행을 가져옵니다. 

 

하지만 이때, 주의하셔야할 점이 위의 두 개의 행은 버리고, 밑의 4개의 행을 가져오는데, 2개의 행 바로 밑에 있는 3번째 행은 컬럼 헤더라고 인식해서 그냥 가져오고, 컬럼헤더의 아래의 4개의 행을 가져옵니다.

 

	정대만	북산고	184	40	35	50	55	25	Java
0	송태섭	북산고	168	80	75	70	80	75	Javascript
1	서태웅	북산고	187	40	60	70	75	80	NaN
2	강백호	북산고	188	15	20	10	35	10	NaN
3	변덕규	능남고	202	80	100	95	85	80	C

  • txt 파일 열기

 

df = pd.read_csv('score.txt', sep = '\t')
   지원번호	이름	학교	키	국어	영어	수학	과학	사회	SW특기
0	1번	채치수	북산고	197	90	85	100	95	85	Python
1	2번	정대만	북산고	184	40	35	50	55	25	Java
2	3번	송태섭	북산고	168	80	75	70	80	75	Javascript
3	4번	서태웅	북산고	187	40	60	70	75	80	NaN
4	5번	강백호	북산고	188	15	20	10	35	10	NaN
5	6번	변덕규	능남고	202	80	100	95	85	80	C
6	7번	황태산	능남고	188	55	65	45	40	35	PYTHON
7	8번	윤대협	능남고	190	100	85	90	95	95	C#

저장하는 방식의 정반대로 해주시면 됩니다.

 

이때 주의해야할 점이 저장할 때, sep를 '\t'로 했기 때문에 그대로 적어주셔야 합니다.

 

만약에 안 적어주시면,

 

	지원번호\t이름\t학교\t키\t국어\t영어\t수학\t과학\t사회\tSW특기
0	1번\t채치수\t북산고\t197\t90\t85\t100\t95\t85\tPython
1	2번\t정대만\t북산고\t184\t40\t35\t50\t55\t25\tJava
2	3번\t송태섭\t북산고\t168\t80\t75\t70\t80\t75\tJavascript
3	4번\t서태웅\t북산고\t187\t40\t60\t70\t75\t80\t
4	5번\t강백호\t북산고\t188\t15\t20\t10\t35\t10\t
5	6번\t변덕규\t능남고\t202\t80\t100\t95\t85\t80\tC
6	7번\t황태산\t능남고\t188\t55\t65\t45\t40\t35\tPYTHON
7	8번\t윤대협\t능남고\t190\t100\t85\t90\t95\t95\tC#

이렇게 됩니다...

 

  • Index 없이 가져오기(Index를 지원번호로 바꾸기)
df = pd.read_csv('score.txt', sep = '\t', index_col='지원번호')
	이름	학교	키	국어	영어	수학	과학	사회	SW특기
지원번호									
1번	채치수	북산고	197	90	85	100	95	85	Python
2번	정대만	북산고	184	40	35	50	55	25	Java
3번	송태섭	북산고	168	80	75	70	80	75	Javascript
4번	서태웅	북산고	187	40	60	70	75	80	NaN
5번	강백호	북산고	188	15	20	10	35	10	NaN
6번	변덕규	능남고	202	80	100	95	85	80	C
7번	황태산	능남고	188	55	65	45	40	35	PYTHON
8번	윤대협	능남고	190	100	85	90	95	95	C#

이렇게 해주시면 '지원번호'로 Index가 바뀝니다.

 

또 다른 방법으로는 set_index도 있겠네요.

 

df = pd.read_csv('score.txt', sep='\t')
df.set_index('지원번호', inplace=True)

이렇게 하셔도 되긴 합니다.


  • excel 파일 열기
df = pd.read_excel('score.xlsx')
    지원번호	이름	학교	키	국어	영어	수학	과학	사회	SW특기
0	1번	채치수	북산고	197	90	85	100	95	85	Python
1	2번	정대만	북산고	184	40	35	50	55	25	Java
2	3번	송태섭	북산고	168	80	75	70	80	75	Javascript
3	4번	서태웅	북산고	187	40	60	70	75	80	NaN
4	5번	강백호	북산고	188	15	20	10	35	10	NaN
5	6번	변덕규	능남고	202	80	100	95	85	80	C
6	7번	황태산	능남고	188	55	65	45	40	35	PYTHON
7	8번	윤대협	능남고	190	100	85	90	95	95	C#

 

여기서도 index가 따로 생겼죠? 이때도 마찬가지로 index_col = '지원번호'로 해주시면 됩니다.

 

df = pd.read_excel('score.xlsx', index_col= '지원번호')
	이름	학교	키	국어	영어	수학	과학	사회	SW특기
지원번호									
1번	채치수	북산고	197	90	85	100	95	85	Python
2번	정대만	북산고	184	40	35	50	55	25	Java
3번	송태섭	북산고	168	80	75	70	80	75	Javascript
4번	서태웅	북산고	187	40	60	70	75	80	NaN
5번	강백호	북산고	188	15	20	10	35	10	NaN
6번	변덕규	능남고	202	80	100	95	85	80	C
7번	황태산	능남고	188	55	65	45	40	35	PYTHON
8번	윤대협	능남고	190	100	85	90	95	95	C#

4. 요약

 

DataFrame을 to_csv, to_excel을 통해 파일로 저장할 수 있고, read_csv, read_excel로 파일을 불러올 수 있습니다.

 

to_csv를 할 때, 주의해야할 점이 encoding='utf-8-sig'로 해야한다는 점이 있고, index = False로 하면 인덱스는 따로 저장하지 않습니다.

 

또한, 텍스트로 저장을 할 때, sep(구분자)가 default 값은 ,(콤마)로 되어있지만 바꿀 수 있고, 불러올 때 같은 sep로 가져와야 이쁘게 가져올 수 있는 점 주의하면 될 것 같습니다.

 

csv와 txt는 to_csv로 하면 되지만, 확장자가 csv는 .csv이고, txt는 .txt인 점 주의하셔야합니다.

 

excel은 워낙 쉬워서 딱히 없네요. 확장자는 .xlsx입니다.

 

감사합니다.

 

지적 환영합니다.

 

 

참고 : 나도코딩