파이썬에서 CSV파일을 읽는 방법들. reader(),genfromtxt(),.readcsv()
안녕하세요. 요즘에 파이썬을 공부중이라서 정리겸 포스팅을 합니다.
최근 주변에 Python을 하는 사람이 많아졌고, 그리고 저도 최근 인공지능 공부때문에 파이썬을 쓰다보니 좀 유용하게 쓸 정보들이 많은 것 같아서 정리를 해야겠습니다.
파이썬에서 CSV파일을 읽는 방법들
사실 파이썬은 툴이고 자료를 가져오는 방식은 특정 라이브러리를 통해서 함수로 읽어오는 방식을 택합니다. 뭘 통해서 가져와야할지를 해매는 경우가 많기 때문에 한번 제가 여기저기 몸으로 고생했던 이야기를 해봅니다.
파이썬에서 읽는 방법은 3가지가 있습니다 .
1. CSV 라이브러리
2. Numpy 라이브러리
3. Pandas 라이브러리
들어가기에 앞서서...
간단한 csv파일을 만듭시다 .
1. CSV 라이브러리 ( csv.reader() )
파이썬 CSV라이브러리는 가장 기본적인 csv를 다루는 툴입니다.
import csv
f = open('Test.csv', 'r', encoding='utf-8')
rdr = csv.reader(f)
for line in rdr:
print(line)
csv의 경우 읽을때는 csv.reader를 통해서 읽습니다.
파일을 변수에 담고 reader메소드 안에 담아주면 됩니다.
CSV의 경우 줄단위로 읽혀오고 이 줄의 있는 각 값들을 리스트에 담습니다. 즉, 한 행이 리스트가 되고 그 속의 열이 리스트 속의 값이 됩니다.
실제 출력 값입니다.
['A', '1']
['B', '2']
['C', '3']
['D', '4']
['E', '5']
그럼 각 값들을 따로 사용하기 위해서는 어떤식으로 사용하는지?
이 리스트에서 값을 때서 사용하는 걸로 생각해버리면 쉽습니다. line[0] 이나, line[:9]라든지..
2. Numpy 라이브러리 ( numpy.genfromtxt() )
numpy는 수학관련한 메소드가 꽤 많기때문에 csv에서 불러올때부터 타입이 지정되어서 나옵니다.
즉, int는 int값을 float는 float값을 가지게 된다. 변수를 따로 형변환 할 필요가 없다는 점이 장점입니다.
import numpy as np
data = np.genfromtxt('Test.csv', delimiter=',', dtype=None, encoding='UTF-8')
print(data)
print(data[0][1]+data[1][1])
쓰면서 알게된 사실은 encoding을 하도록 유도를 하는 점이였는데 genfromtxt의
형변환 할 필요없이 수학적 계산을 편리하게 할 수 있습니다.
혹은 이 값들을 특정 형식으로 지정할 수 있습니다. float이나 int 타입등으로 따로 형변환을 해줄 수 있으며,
지금과 같이 글자, 숫자가 섞여 있는 경우 dtype을 None을 사용하면 값을 출력해낼 수 있습니다.
[('A', 1) ('B', 2) ('C', 3) ('D', 4) ('E', 5)]
3
이때의 출력값은 data라는 리스트안에 튜플이 들어가 있는 모습입니다 .
이 리스트의 [N][M] N은 행을 M은 열을 뜻합니다. 필요한 행과 필요한 열을 뽑아서 사용할수 있습니다..
3. Pandas 라이브러리 ( pandas.readcsv() )
판다스는 데이터를 불러오는 라이브러리입니다. CSV파일뿐만 아니라 xlsx파일, txt파일등 이런 파일자체를 형식을 만들어서 관리하는 라이브러리라고 생각하면 좋습니다.
표형식을 만들어서 그 표에 대한 값을 잘 뽑아서 사용할 수 있습니다.
판다스의 경우 .read_csv를 통해 값을 읽어옵니다. 이값은 리스트나 튜플의 형태를 가진게아니라 일정 표의 형식을 가진 형태로 나오게됩니다.
참고로 이 표의 경우 행과 열을 표시를 해주기도하니 눈에 잘 보이기도 합니다.
또한 여기서 특정 열 특정 값만 빼오기위해서는 Loc를 이용해서 값을 가져오거나
For의 range(len(data))를 통해 행의 값을 불러와서 한 행 한 열의 값을 특정 지을수도 있습니다.
각각의 값이 나오는 모습을 보면 대략적으로 알 수 있습니다.
import pandas as pd
data = pd.read_csv('Test.csv')
print(data)
print(data.loc[:,'A'])
for i in range(len(data)):
print(data.loc[i])
loc[i]를 통해 특정값이 나오는 경우 각 열의 "key"와 "value"를 알려줍니다.
그리고 그 key값을 통해서 따로 value만 가져오고 싶은 경우 .loc[i, "key"] 이런 형식으로 key값을 따로 정리하는 것으로 이용합니다.
A 1
0 B 2
1 C 3
2 D 4
3 E 5
0 B
1 C
2 D
3 E
Name: A, dtype: object
A B
1 2
Name: 0, dtype: object
A C
1 3
Name: 1, dtype: object
A D
1 4
Name: 2, dtype: object
A E
1 5
Name: 3, dtype: object
'Python' 카테고리의 다른 글
⌜미국 주식으로 시작하는 슬기로운 퀀트투자⌟ 서평 (0) | 2021.10.25 |
---|---|
파이썬에서 리스트 안 리스트를 집합으로 만들때 해결방법 (0) | 2020.03.18 |