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입니다.
감사합니다.
지적 환영합니다.
참고 : 나도코딩
'Python Library > Pandas' 카테고리의 다른 글
[Pandas - Python] Pandas 라이브러리와 데이터의 선택(loc, iloc) (0) | 2022.02.07 |
---|---|
[Pandas - Python] Pandas 라이브러리와 데이터 확인 및 선택(기본) (0) | 2022.02.05 |
[Pandas - Python] Pandas 라이브러리와 Index 정리 (0) | 2022.02.04 |
[Pandas] Pandas 라이브러리와 DataFrame (0) | 2022.02.04 |
[Pandas] Pandas 라이브러리와 Series (0) | 2022.02.04 |