CSV(comma-separated values) 파일은 데이터를 쉼표로 분리된 테이블로 저장한 텍스트 파일이다.
예를 들면 다음과 같은 것이다.
이름, 회사, 직책, 생년월일
대조영, 대우상사, 과장, 1990-02-01
왕건, 미래바이오, 부장, 1981-09-17
이성계, 오성텔레콤, 대리, 2000-05-15
판다스(Pandas) 라이브러리의 read_csv() 함수를 이용하면 CSV파일을 읽어서 판다스의 데이터 구조인 DataFrame 타입으로 저장할 수 있다. read_csv() 함수의 주요 인자는 다음과 같다.
import pandas as pd
data = pd.read_csv(file_path, thousands=’,’, header=None)
thousands는 천 단위로 쉼표로 끊어져 있는 숫자를 인식한다. 파일에 데이터만 있으면 header=None으로 설정하면 되며, 만약 데이터가 시작되기 전에 컬럼(column, 열) 이름이나 설명문이 들어가 있고 데이터는 두번째 줄부터 시작한다면 header=0으로 설정하면 된다. 다음과 같이 csv파일로 저장된 Nvidia 주가가 있을 때,
2023-01-03,148.509995,149.960007,140.960007,143.149994,143.125687,40127700
2023-01-04,145.669998,148.529999,142.410004,147.490005,147.464966,43132400
2023-01-05,144.910004,145.639999,141.479996,142.649994,142.625763,38916800
2023-01-06,144.740005,150.100006,140.339996,148.589996,148.564758,40504400
2023-01-09,152.839996,160.559998,151.410004,156.279999,156.253464,50423100
2023-01-10,155.070007,159.619995,154.720001,159.089996,159.062988,38410100
.....
2023-05-12,285.290009,287.799988,280.459991,283.399994,283.399994,27402700
2023-05-15,285.079987,289.690002,281.519989,289.529999,289.529999,29392600
이를 읽기 위해서는
data = pd.read_csv('NVDA.csv', header=None)
하면 된다. 데이터 상단에서 몇개(여기서는 5개)의 데이터만 프린트하고 싶다면 head 메소드를 사용한다. 하단부분만 프린트하고 싶다면 trail 메소드를 사용한다.
print(data.head(5))
0 1 2 ... 4 5 6
0 2023-01-03 148.509995 149.960007 ... 143.149994 143.125687 40127700
1 2023-01-04 145.669998 148.529999 ... 147.490005 147.464966 43132400
2 2023-01-05 144.910004 145.639999 ... 142.649994 142.625763 38916800
3 2023-01-06 144.740005 150.100006 ... 148.589996 148.564758 40504400
4 2023-01-09 152.839996 160.559998 ... 156.279999 156.253464 50423100
컬럼(열)을 제거하려면 drop()함수를 사용한다. 5번 컬럼을 제거하려면 다음과 같이 한다.
data.drop([5], axis=1, inplace=True)
0 1 2 3 4 6
0 2023-01-03 148.509995 149.960007 140.960007 143.149994 40127700
1 2023-01-04 145.669998 148.529999 142.410004 147.490005 43132400
2 2023-01-05 144.910004 145.639999 141.479996 142.649994 38916800
3 2023-01-06 144.740005 150.100006 140.339996 148.589996 40504400
4 2023-01-09 152.839996 160.559998 151.410004 156.279999 50423100
DataFrame의 컬럼 이름을 변경하기 위해서는 다음과 같이 한다.
data.columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume']
Date Open High Low Close Volume
0 2023-01-03 148.509995 149.960007 140.960007 143.149994 40127700
1 2023-01-04 145.669998 148.529999 142.410004 147.490005 43132400
2 2023-01-05 144.910004 145.639999 141.479996 142.649994 38916800
3 2023-01-06 144.740005 150.100006 140.339996 148.589996 40504400
4 2023-01-09 152.839996 160.559998 151.410004 156.279999 50423100
해당 기간 동안의 시가(Open)와 종가(Close)를 그려보려면 다음과 같이 한다.
from matplotlib import pyplot as plt
fig, ax = plt.subplots()
ax.plot(data['Date'], data['Open'], label='Open')
ax.plot(data['Date'], data['Close'], label='Close')
plt.title('NVDA data')
plt.xlabel('Date')
plt.ylabel('Price')
ax.legend()
plt.show()
날짜만 따로 저장하려면 다음과 같이 한다.
dates = pd.to_datetime(data['Date'])
print(dates.head(5))
0 2023-01-03
1 2023-01-04
2 2023-01-05
3 2023-01-06
4 2023-01-09
날짜를 제외한 나머지 컬럼 데이터를 따로 저장하려면 다음과 같이 한다.
cols = list(data)[1:6] # ['Open', 'High', 'Low', 'Close', 'Volume']
prices = data[cols]
print(prices.head(5))
Open High Low Close Volume
0 148.509995 149.960007 140.960007 143.149994 40127700
1 145.669998 148.529999 142.410004 147.490005 43132400
2 144.910004 145.639999 141.479996 142.649994 38916800
3 144.740005 150.100006 140.339996 148.589996 40504400
4 152.839996 160.559998 151.410004 156.279999 50423100
Date를 기준으로 현재부터 과거 순으로 소팅하려면 sort_values() 함수를 사용한다.
data.sort_values(by=['Date'], axis=0, ascending=False, inplace=True)
data.reset_index(inplace=True)
print(data.head(5))
그러면,
index Date Open High Low Close Volume
0 91 2023-05-15 285.079987 289.690002 281.519989 289.529999 29392600
1 90 2023-05-12 285.290009 287.799988 280.459991 283.399994 27402700
2 89 2023-05-11 288.959991 289.500000 282.459991 285.779999 32214900
3 88 2023-05-10 290.049988 291.130005 284.609985 288.850006 36935000
4 87 2023-05-09 288.989990 289.730011 284.500000 285.709991 31486900
이 되어서 자동으로 index 컬럼이 추가된다. 이것을 제거하려면 drop()함수를 사용한다.
data.drop(['index'], axis=1, inplace=True)
Date Open High Low Close Volume
0 2023-05-15 285.079987 289.690002 281.519989 289.529999 29392600
1 2023-05-12 285.290009 287.799988 280.459991 283.399994 27402700
2 2023-05-11 288.959991 289.500000 282.459991 285.779999 32214900
3 2023-05-10 290.049988 291.130005 284.609985 288.850006 36935000
4 2023-05-09 288.989990 289.730011 284.500000 285.709991 31486900
Date컬럼의 string에서 ‘-‘를 제거하려면 str.replace()함수를 사용한다.
data['Date'] = data['Date'].str.replace('-','')
Date Open High Low Close Volume
0 20230515 285.079987 289.690002 281.519989 289.529999 29392600
1 20230512 285.290009 287.799988 280.459991 283.399994 27402700
2 20230511 288.959991 289.500000 282.459991 285.779999 32214900
3 20230510 290.049988 291.130005 284.609985 288.850006 36935000
4 20230509 288.989990 289.730011 284.500000 285.709991 31486900
'프로그래밍 > 파이썬' 카테고리의 다른 글
주피터 노트북 사용법 (0) | 2021.05.05 |
---|---|
넘파이(numpy)에서 행렬 연산 (0) | 2021.03.12 |
넘파이(numpy)에서 행렬 모양 바꾸기, 자르기, 확장하기 (0) | 2021.03.11 |
넘파이(numpy)에서 행렬 생성 (0) | 2021.03.11 |
댓글