Ramanu

Pandas read_csv, to_csv 본문

데이터

Pandas read_csv, to_csv

Ramanu 2020. 10. 30. 15:38

python에 존재하는 모듈인 Pandas에서 데이터 분석을 위해 csv를 불러올 때 사용하는 함수이다.

 

 

A. read_csv

1. 일반적인 작은 데이터를 불러 사용할 때 사용

import pandas as pd

filename = './test.csv'
data = pd.read_csv(filename)

> Output

 

2-1. 대용량 데이터를 일부 처리할 때 사용

import pandas as pd

filename = './test.csv'
data = pd.read_csv(filename, skiprows=[i for i in range(1, 500)], nrows=100)

skiprows : 1부터 10000까지 데이터를 건너뛴다.

nrow : 20000개의 데이터를 불러온다.

 

> Output

500-600 output

 

# 문제점 : skiprows를 사용할 때, 위의 코드처럼 사용하게 된다면 메모리에 600개의 데이터가 올라가기 때문에 대용량의 데이터는 처리하기 어려울 듯하다. ( Ram이 크지 않는 이상..)

 

 

2-2. 대용량 데이터를 쪼개서 처리할 때 사용

import pandas as pd

filename = './test.csv'
chunk_s = 100

for chunk_data in enumerate(pd.read_csv(filename, chunksize=chunk_s)):
    print(chunk_data) 

chunksize : 데이터를 chunk_s만큼 불러와서 사용한다.

 

> Output

1-100, 100-200

 

중략...

 

800-900, 900-1000

 

데이터가 8G(columns 대략 30개)인 csv를 메모리에 올리려면 한번에 30GB의 메모리가 필요한 것 같다... ㅠㅠ

물론 데이터의 형식에 따라 다르겠지만 어쨋든 대용량의 데이터를 처리하기 위해서는 쪼개거나 큰 메모리를 가지고 있어야 하는 것 같다.

 

 

B. to_csv

1. pandas의 DataFrame을 csv로 저장하고 싶을 때 사용

import pandas as pd

test = pd.DataFrame(columns=["A", "B"])

for idx in range(1000):
	a_word = "A" + str(idx)
    b_word = "B" + str(idx)
    test.loc[idx] = [a_word, b_word]
    
test.to_csv("./test.csv", index=False)

#test.to_csv("./test.csv", mode='w')
#test.to_csv("./test.csv", mode='a', index=False, header=False)

mode : csv로 저장하기 위해 사용되는 모드, default = w / 일반적으로 w : write,  a : append 가 있다.

index : 데이터를 저장할 때, index 값 저장 여부, default = True

header : 데이터를 저장할 때, column 값 저장 여부, default = True

 

# append로 저장할 때는 header가 없는게 낫다. (데이터 값으로 header값이 들어가기 때문에..)

 

 

'데이터' 카테고리의 다른 글

Python Multiprocessing  (0) 2020.11.30
Pandas 주요 기능  (0) 2020.11.30
python dictionary key값 중심으로 정렬 후 dictionary로 반환  (0) 2020.11.10
python multiprocessing Manager pickle dump, load error  (0) 2020.11.10
Pandas isin  (0) 2020.11.02
Comments