티스토리 뷰

Programming/python

Pandas 로 CSV 파일 읽기

tech_curioso 2019. 6. 23. 03:13
728x90
반응형

엑셀 파일 정확하게는 CSV파일을 읽어서 간단하게 파이썬 데이터 구조로 만드는 방법이 필요한데 

pandas로 아주 간단히 가능하다. 

 

샘플로 얼굴의 landmark 정보 데이터를 사용했다. 다음 링크에서 얼굴 이미지와 연습용 csv파일을 다운받을 수 있다.

https://download.pytorch.org/tutorial/faces.zip

 

 

pandas 라이브러리 불러오기

먼저 다음과 같이 pandas 라이브러리를 불러온다. 

import pandas as pd

 

파일 읽기

파일위치 폴더를 포함한 csv파일이름을 파라미터로 read_csv 함수에 입력하여 데이터를 간단하게 읽어 올 수 있다.

landmarks = pd.read_csv('faces/face_landmarks.csv')

원래 csv파일을 읽어 보면 다음과 같다.

가장 첫번째 행은 각 열의 카테고리를 나타내고 있으며 다음 행부터 데이터가 들어가 있다. 간단하게 첫번째 열은 이미지 파일 이름이 들어 있고 나머지는 각 얼굴 이미지에 대한 특징점 데이터들의 좌표들이다. 

 

데이터 확인해보기

입력된 데이터를 확인해 보면 다음과 같다. 

landmarks

 

csv파일을 엑셀 프로그램에서 읽었을 때 구조가 그대로 들어가 있는 것을 알 수 있다.

 

 

loc로 데이터 슬라이싱하기

loc는 카테고리 이름으로 데이터를 슬라이싱하는 명령어이다. 다음과 같이 image_name 카테고리 이름을 이용해 이미지 파일들만 따로 뽑을 수 있다.

landmarks.loc[:,'image_name']

다음과 같이 이미지 파일명만 따로 뽑을 수 있다. 

as_matrix() / values

사실 이 데이터는 pandas에서 쓰는 데이터프레임 형식으로 파이썬에서 그대로 쓸수 없다. 여기에 간단히 as_matrix()를 추가하여 배열 데이터 구조로 변형이 가능하다. 이후에 as_matrix()는 사라진다고 주의 메시지를 보니 values를 사용해도 된다.

 

print(landmarks.loc[:,'image_name'].values)

['0805personali01.jpg' '1084239450_e76e00b7e7.jpg' '10comm-decarlo.jpg'
 '110276240_bec305da91.jpg' '1198_0_861.jpg' '137341995_e7c48e9a75.jpg'
 '1383023626_8a49e4879a.jpg' '144044282_87cf3ff76e.jpg'
 '152601997_ec6429a43c.jpg' '1549040388_b99e9fa295.jpg'
 '1878519279_f905d4f34e.jpg' '2046713398_91aaa6fe1c.jpg'
 '2173711035_dbd53b4f9f.jpg' '2210514040_6b03ff2629.jpg'
 '2322901504_08122b01ba.jpg' '2327253037_66a61ea6fe.jpg'
 '2328398005_d328a70b4c.jpg' '2370961440_6bc8ce346c.jpg' '2382SJ8.jpg'
 '252418361_440b75751b.jpg' '262007783_943bbcf613.jpg'
 '2633371780_45b740b670.jpg' '2647088981_60e9fe40cd.jpg'
 '2711409561_a0786a3d3d.jpg' '2722779845_7fcb64a096.jpg'
 '2795838930_0cc5aa5f41.jpg' '2902323565_100017b63c.jpg'
 '2902760364_89c50bde40.jpg' '2956581526_cd803f2daa.jpg'
 '297448785_b2dda4b2c0.jpg' '299733036_fff5ea6f8e.jpg'
 '303808204_1f744bc407.jpg' '3074791551_baee7fa0c1.jpg'
 '3152653555_68322314f3.jpg' '3264867945_fe18d442c1.jpg'
 '3273658251_b95f65c244.jpg' '3298715079_5af7c78fcb.jpg'
 '3325611505_ddc7beffa1.jpg' '3362762930_24f76cb89c.jpg'
 '343583208_e986824d77.jpg' '3461016494_56cce9c984.jpg'
 '348272697_832ce65324.jpg' '3534188114_2108895291.jpg'
 '3534189272_8ef88ba368.jpg' '3555944509_7b477069c6.jpg'
 '3574737496_6ee8207045.jpg' '362167809_d5a5dcbfdb.jpg'
 '363149951_8be04dc6c0.jpg' '3638950581_3387685d3a.jpg'
 '3646828311_bfeb429ef7.jpg' '3689162471_5f9ffb5aa0.jpg'
 '3718903026_c1bf5dfcf8.jpg' '3790616528_297c0ac935.jpg'
 '3855944735_e252959937.jpg' '3856149136_d4595ffdd4.jpg'
 '3872768751_e60d7fdbd5.jpg' '529447797_0f9d2fb756.jpg'
 '57635685_d41c98f8ca.jpg' '809285949_6889026b53.jpg'
 '92053278_be61a225d2.jpg' '96063776_bdb3617b64.jpg'
 '97308305_4b737d0873.jpg' 'britney-bald.jpg' 'deeny.peggy.jpg'
 'matt-mathes.jpg' 'person-7.jpg' 'person.jpg'
 'person_TjahjonoDGondhowiardjo.jpg' 'personalpic.jpg']

 

 

iloc로 데이터 슬라이싱하기

iloc는 인덱스 번호로 데이터를 골라내는 것으로 배열 처럼 쉽게 사용할 수 있어서 개인적으로 더 많이 쓰는 것 같다. 

앞에서 image_name 카테고리로 데이터 열을 골라낸 것을 인덱스 번호로 다음과 같이 사용해서 같은 데이터를 구할 수 있다.

print(landmarks.iloc[:,0].values)

['0805personali01.jpg' '1084239450_e76e00b7e7.jpg' '10comm-decarlo.jpg'
 '110276240_bec305da91.jpg' '1198_0_861.jpg' '137341995_e7c48e9a75.jpg'
 '1383023626_8a49e4879a.jpg' '144044282_87cf3ff76e.jpg'
 '152601997_ec6429a43c.jpg' '1549040388_b99e9fa295.jpg'
 '1878519279_f905d4f34e.jpg' '2046713398_91aaa6fe1c.jpg'
 '2173711035_dbd53b4f9f.jpg' '2210514040_6b03ff2629.jpg'
 '2322901504_08122b01ba.jpg' '2327253037_66a61ea6fe.jpg'
 '2328398005_d328a70b4c.jpg' '2370961440_6bc8ce346c.jpg' '2382SJ8.jpg'
 '252418361_440b75751b.jpg' '262007783_943bbcf613.jpg'
 '2633371780_45b740b670.jpg' '2647088981_60e9fe40cd.jpg'
 '2711409561_a0786a3d3d.jpg' '2722779845_7fcb64a096.jpg'
 '2795838930_0cc5aa5f41.jpg' '2902323565_100017b63c.jpg'
 '2902760364_89c50bde40.jpg' '2956581526_cd803f2daa.jpg'
 '297448785_b2dda4b2c0.jpg' '299733036_fff5ea6f8e.jpg'
 '303808204_1f744bc407.jpg' '3074791551_baee7fa0c1.jpg'
 '3152653555_68322314f3.jpg' '3264867945_fe18d442c1.jpg'
 '3273658251_b95f65c244.jpg' '3298715079_5af7c78fcb.jpg'
 '3325611505_ddc7beffa1.jpg' '3362762930_24f76cb89c.jpg'
 '343583208_e986824d77.jpg' '3461016494_56cce9c984.jpg'
 '348272697_832ce65324.jpg' '3534188114_2108895291.jpg'
 '3534189272_8ef88ba368.jpg' '3555944509_7b477069c6.jpg'
 '3574737496_6ee8207045.jpg' '362167809_d5a5dcbfdb.jpg'
 '363149951_8be04dc6c0.jpg' '3638950581_3387685d3a.jpg'
 '3646828311_bfeb429ef7.jpg' '3689162471_5f9ffb5aa0.jpg'
 '3718903026_c1bf5dfcf8.jpg' '3790616528_297c0ac935.jpg'
 '3855944735_e252959937.jpg' '3856149136_d4595ffdd4.jpg'
 '3872768751_e60d7fdbd5.jpg' '529447797_0f9d2fb756.jpg'
 '57635685_d41c98f8ca.jpg' '809285949_6889026b53.jpg'
 '92053278_be61a225d2.jpg' '96063776_bdb3617b64.jpg'
 '97308305_4b737d0873.jpg' 'britney-bald.jpg' 'deeny.peggy.jpg'
 'matt-mathes.jpg' 'person-7.jpg' 'person.jpg'
 'person_TjahjonoDGondhowiardjo.jpg' 'personalpic.jpg']

 

배열에서 사용하는 : 같은 표현법을 사용하여 특정한 행을 골라서 하나의 배열로 선택이 가능하다. 

print(landmarks.iloc[3,:].values)

['110276240_bec305da91.jpg' 42 140 45 161 51 180 61 200 73 220 89 238 108
 255 129 268 155 268 180 261 203 244 222 224 238 199 247 172 248 144 245
 116 241 87 39 114 45 102 57 97 72 96 87 99 120 91 136 78 155 70 178 66
 199 71 108 114 111 132 115 150 118 168 107 180 116 182 127 182 138 177
 147 171 57 134 65 127 77 122 92 125 80 130 68 134 143 111 155 103 167 100
 182 101 170 107 158 109 98 207 107 199 120 193 131 193 142 188 162 185
 184 187 168 206 151 218 139 222 127 223 113 219 103 206 122 203 133 201
 144 197 180 189 147 204 136 208 125 209]

현재 데이터는 한 행에 이미지 이름과 특징점 데이터 두가지 그룹으로 나누어서 처리하는 것이 좋으므로 다음과 같이 분리해서 관리할 수 있다.

 

image_names = landmarks.iloc[3,0]
landmark_points = landmarks.iloc[3,1:].values
print(image_names)
print(landmark_points)

110276240_bec305da91.jpg
[42 140 45 161 51 180 61 200 73 220 89 238 108 255 129 268 155 268 180 261
 203 244 222 224 238 199 247 172 248 144 245 116 241 87 39 114 45 102 57
 97 72 96 87 99 120 91 136 78 155 70 178 66 199 71 108 114 111 132 115 150
 118 168 107 180 116 182 127 182 138 177 147 171 57 134 65 127 77 122 92
 125 80 130 68 134 143 111 155 103 167 100 182 101 170 107 158 109 98 207
 107 199 120 193 131 193 142 188 162 185 184 187 168 206 151 218 139 222
 127 223 113 219 103 206 122 203 133 201 144 197 180 189 147 204 136 208
 125 209]

 

 

참고문헌 

https://datascienceschool.net/view-notebook/704731b41f794b8ea00768f5b0904512/

 

Data Science School

Data Science School is an open space!

datascienceschool.net

 

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함