본문 바로가기
개발일지/Pandas

pandas 판다스 기초 13 import CSV file

by 다니엘의 개발 이야기 2022. 7. 26.
320x100
# Importing CSV Files
## First Steps

with open('titanic.csv') as f:
    text = f.readlines()
text

'''
['survived,pclass,sex,age,sibsp,parch,fare,embarked,deck\n',
 '0,3,male,22.0,1,0,7.25,S,\n',
 '1,1,female,38.0,1,0,71.2833,C,C\n',
 '1,3,female,26.0,0,0,7.925,S,\n',
 '1,1,female,35.0,1,0,53.1,S,C\n',
 '0,3,male,35.0,0,0,8.05,S,\n',
 '0,3,male,,0,0,8.4583,Q,\n',
'''
# 같은게 배열된다.
len(text)
# 892
# pandas의 read_csv()안에 들어가는 매개변수 몇가지 설명
# 매개변수 1 Index_col - 기준 인덱스로 잡아주는 역할을 한다.

import pandas as pd
pd.read_csv('titanic.csv', index_col= 'pclass')

'''
	survived	sex	age	sibsp	parch	fare	embarked	deck
pclass								
3	0	male	22.0	1	0	7.2500	S	NaN
1	1	female	38.0	1	0	71.2833	C	C
3	1	female	26.0	0	0	7.9250	S	NaN
1	1	female	35.0	1	0	53.1000	S	C
3	0	male	35.0	0	0	8.0500	S	NaN
...	...	...	...	...	...	...	...	...
2	0	male	27.0	0	0	13.0000	S	NaN
1	1	female	19.0	0	0	30.0000	S	B
3	0	female	NaN	1	2	23.4500	S	NaN
1	1	male	26.0	0	0	30.0000	C	C
3	0	male	32.0	0	0	7.7500	Q	NaN
891 rows × 8 columns
'''
# 매개변수 2 header - 기준 컬럼을 잡아주는 역할을 한다.
# csv로 값을 가져올때 csv파일은 모두가 행으로 이루어져 있다.
# 이 행중에서 어떤게 기준 컬럼으로 되냐에 따라서 가시적으로 필드를 보기에 용이할 수가있고, 아닐 수가 있다.

pd.read_csv('titanic.csv', header = 1)

'''
	0	3	male	22.0	1	0.1	7.25	S	Unnamed: 8
0	1	1	female	38.0	1	0	71.2833	C	C
1	1	3	female	26.0	0	0	7.9250	S	NaN
...	...	...	...	...	...	...	...	...	...
888	1	1	male	26.0	0	0	30.0000	C	C
889	0	3	male	32.0	0	0	7.7500	Q	NaN
890 rows × 9 columns
'''
pd.read_csv('titanic.csv', header = 0)

'''
    survived	pclass	sex	age	sibsp	parch	fare	embarked	deck
0	0	3	male	22.0	1	0	7.2500	S	NaN
1	1	1	female	38.0	1	0	71.2833	C	C
...	...	...	...	...	...	...	...	...	...
889	1	1	male	26.0	0	0	30.0000	C	C
890	0	3	male	32.0	0	0	7.7500	Q	NaN
891 rows × 9 columns
'''

# header 값을 None으로 주게 될 수도 있다.
# 그럴 경우 자동적으로 0번째 행이 기준 컬럼이 되며
# 기준컬럼 위에는 컬럼 인덱스 넘버가 생성된다.
# 매개변수 3 names - 기준 컬럼의 값을 변경해준다.
# 주의점은 기준 컬럼의 갯수와 지정해주고자 하는 names의 elements의 갯수가 일치해야한다.
pd.read_csv('titanic.csv', header = 0, 
            names = ['alive', 'class', 'gender', 'age', 'sibsp', 'parch', 'price', 'emb', 'deck'])

'''
    alive	class	gender	age	sibsp	parch	price	emb	deck
0	0	3	male	22.0	1	0	7.2500	S	NaN
1	1	1	female	38.0	1	0	71.2833	C	C
...	...	...	...	...	...	...	...	...	...
889	1	1	male	26.0	0	0	30.0000	C	C
890	0	3	male	32.0	0	0	7.7500	Q	NaN
891 rows × 9 columns
'''
# 매개변수 4 usecols - 전체가 아닌 일부 컬럼만 호출할 때
# 주의점은 usecols를 작성할때 반드시 리스트 형태로 만들어서 입력해야한다.
# 한개를 하든, 기준 컬럼의 갯수만큼이든.
# 그렇지 않으면 에러가 난다.

pd.read_csv('titanic.csv', usecols = ['fare', 'survived'])

'''

    survived	fare
0	0	7.2500
1	1	71.2833
...	...	...
889	1	30.0000
890	0	7.7500
891 rows × 2 columns
'''

# 보다시피 기준 컬럼의 순서와 다르게 섞어서 써줘도, 일치하는 기준컬럼의 순서대로 작성된다.
titanic = pd.read_csv('titanic.csv', header = 0, index_col='pclass', usecols = ['survived', 'pclass', 'sex', 'age'])
titanic

'''
	survived	sex	age
pclass			
3	0	male	22.0
1	1	female	38.0
...	...	...	...
1	1	male	26.0
3	0	male	32.0
891 rows × 3 columns
'''
# 만약 이미 설정된 컬럼명이 마음에 들지 않는다면 이렇게 바꾸어주면 된다.
# 주의점은 이것도 컬럼의 갯수와 일치해야한다.

titanic.columns = ['alive', 'gender', 'age']
# 기준 컬럼으로 잡히게 되어서 행 인덱스측면으로 빠지게 된 값의 이름을 바꾸어주고 싶으면 (기준 행 인덱스 이름 변경)
# 이것도 기준 행 인덱스의 수와 일치하게 입력을 해주어야 할것이다.

titanic.index.name = 'class'

titanic

'''
	alive	gender	age
class			
3	0	male	22.0
1	1	female	38.0
...	...	...	...
1	1	male	26.0
3	0	male	32.0
891 rows × 3 columns
'''


# Importing messy CSV Files
- 비 정형 데이터 읽어오고 가공하기

import pandas as pd
pd.read_csv('titanic_raw.csv')

'''
					This	is	the	Titanic	Dataset.
It	contains	all	passengers	that	were	aboard	the	titanic	when
the	tragic	disaster	occured	in	the	year	19	1	2
...	...	...	...	...	...	...	...	...	...
End	of	the	Dataset				NaN	NaN	NaN
Get	more	Datasets	on	Kaggle	.	com	NaN	NaN	NaN
898 rows × 5 columns
'''
'''
기본적으로 titanic_raw.csv는 처음 서두에서 불필요한 내용과
끝 맺음에 두줄이 불필요한 내용이 있었다.
이를 방지하기위해 우선은 처음 불필요한 4줄과 마지막 불필요한 2줄을 없애줄 것이다.

먼저, 컬럼명으로 사용해 줄 리스트를 만들자.
'''

# 컬럼명으로 이용할 이름의 리스트
col_names = ['Survived', 'Class', 'Gender', 'Age', 'Sipsp', 'Parch', 'Fare', 'Emb', 'Deck']

# 1. 먼저 처음부터 시작하는 rows를 무시하고 싶다면 skiprows를 해줘도 되고 header를 해줘도 된다.
# 2. 다음으로는 마지막에서 시작하는 rows를 무시하고 싶다면 skipfooter를 사용한다.

# 3. skiprows로 첫번째로 부터 시작하는 열을 무시하고 header = None을 해주게 되면 컬럼 인덱스가 생성된다.
# 이것을 추후에 변경해도 되고, 아니면 header = None 없이 바로 이렇게 바꿔줘도 된다.
titanic = pd.read_csv('titanic_raw.csv', skiprows=3, skipfooter=2, names = col_names)
titanic

'''
	Survived	Class	Gender	Age	Sipsp	Parch	Fare	Emb	Deck
0	0	3	male	22.0	1	0	$7.25	S	NaN
1	1	1	female	38.0	1	0	$71.2833	C	C
...	...	...	...	...	...	...	...	...	...
892	0	3	male	34.0	1	1	$14.4	S	NaN
893	0	3	male	36.0	0	0	$7.8958	S	NaN
894 rows × 9 columns
'''
# 현재 경로에 정형화 된 데이터 csv파일 생성해주기
# 반드시 index = False를 해주어야 한다.
# 그래야만 rangeindex에 대해서 행 인덱스가 추가로 생성이 안된다.
# 무슨말이냐면 index = False를 안해주면 왼쪽 행 기준으로 인덱스 넘버가 두번씩 나온다고 보면 된다.
# rangeindex는 기본적으로 1개로 족하다.

titanic.to_csv('titanic_imp.csv', index = False)
pd.read_csv('titanic_imp.csv')

'''

Survived	Class	Gender	Age	Sipsp	Parch	Fare	Emb	Deck
0	0	3	male	22.0	1	0	$7.25	S	NaN
1	1	1	female	38.0	1	0	$71.2833	C	C
...	...	...	...	...	...	...	...	...	...
892	0	3	male	34.0	1	1	$14.4	S	NaN
893	0	3	male	36.0	0	0	$7.8958	S	NaN
894 rows × 9 columns
'''

 

300x250