목적

list 형식 혹은 array 데이터를 .txt나 .csv파일로
변환하고 데이터를 쌓는데 필요한 명령어 정리

순서

I. open()함수
II. list -> file write(append) (join함수이용)
III. pandas Dataframe to csv
IV. .txt -> .csv로 변환


I. open()함수

python에서 파일을 열고 쓸 때는 open()함수를 사용합니다.

myfile = open("D:/myfilename.txt",
              mode = 'r',
              encoding = 'UTF-8',
              newline = None,
              buffering=-1,
              errors = None,
              closefd = True,
              opener=None)

첫 번째 인자는 file의 경로를 string으로 전달합니다.

두 번째 인자는 file open mode로 'r'(read), 'w'(write), 'a'(append) 입니다. 한 개씩만 지정 가능합니다.
write모드 특징 : 해당 파일이 있던지 없던지 내용을 모두 비우고 새로운 파일 생성
apend모드 특징 : 해당 파일이 존재한다면 내용을 보존하고 그 다음에 이어서 작성할 수 있음.

세 번째 인자는 인코딩 형식입니다.
나머지는 아직 잘 모르겠으나 사용할기회가 온다면 정리할 것!

이렇게 myfile의 변수에 파일 인스턴스를 생성했다면

myfile.read() # 파일 읽기
myfile.close() # 파일 닫기 필수
myfile.write() # string 인자 전달해 파일 쓰거나 기존 파일에 append

다음과 같은 함수를 사용할 수 있습니다.

 


II. list -> file write(append)

1. 기본 text write

mytext = 'hello'

myfile = open("D:/mydata.txt",mode = 'a')
myfile.write(mytext)
myfile.close()

2. .txt 및 .csv 에 ',' 구분자로 넣기

1. string list
2. int list ( numpy array도 동일)

mystrlist = ['1','2','3']
mynumlist = [4,5,6] # 혹은 numpy.array([4,5,6])

myfile = open("D:/myfile.txt", mode = 'a')

mystrtext = ','.join(mystrlist)
mynumtext = ','.join(map(str,mynumlist))

myfile.write(mystrtext + '\n')
myfile.write(mynumtext + '\n')

myfile.close()


# myfile.txt

# 1,2,3
# 4,5,6
# 

어차피 .txt나 .csv나 포맷만 다르기 때문에 동일하게 사용하면 된다!

map(func, list)
: list의 요소를 지정된 func로 처리해주는 함수이다. (원본리스트 변경하지 않음)

1. list 뿐 아닌 모든 반복적인 객체 가능
2. func에는 함수 뿐 아닌 int, str등 형변환도 가능함.
3. map객체는 여러 변수로 할당할 수 있음.

ex) a,b = map(int, [1,2]) => a=1, b=2로 대입된다.

 


III. Pandas Dataframe to .csv

최종적으로 해야할 것은 pandas모듈에 있는 to_csv()함수를 사용하는 것!

하고싶은 것
1. numpy.ndarray의 행에 data 쌓기
2. 해당 data를 csv로 변환

해야할 일
1. numpy. vstack()
2. numpy to pandas Dataframe
3. pandas.to_csv()

추가로 도움되는 정보
1. array의 특정 부분만 값을 변경 및 계산하기
2. pandas Dataframe을 쌓기


해야할 것

import numpy as np
import pandas as pd

mycolumns = ['Data 1','Data 2','Data 3']

# 1. array가 다음과 같이 있다.
nparray = np.array([[1,10,40],[2,20,50],[3,30,60]], dtype = 'float16')

# 2. pandas Dataframe으로 변환
pdDf = pd.DataFrame(data = nparray, columns = mycolumns) 

# 3. csv로 변환
pdDf.to_csv("D:/myfile.csv", sep=',' , index = False, na_rep='NaN', float_format='%.4f')

- to_csv 함수 분석

인자 1: 파일 디렉토리를 인자로 전달.
인자 2 : sep으로 구분자 지정하여 저장.
인자 3 : True라면 가장 좌측에 몇 번째 줄인지 데이터가 같이 저장된다.
인자 4 : 잘못된 정보가 들어있을 때 어떻게 표시될 지 정함.
인자 5 : 소수점 포맷일 때 몇번 째 자리까지 표시할지 정함.


추가 정보 1. array의 부분만 계산하여 변경할 때

nparray = np.array([[1,10,40],[2,20,50],[3,30,60]], dtype = 'float16')

2열과 3열만 x 2를 하고싶다.

nparray[:, 1:] = nparray[:, 1:] * 2

** 이런 작업은 기본 list에서는 불가능함!

추가 정보 2. pandas Dataframe을 쌓을 때

import pandas as pd

mycolumns = ['col 1','col 2', 'col 3']

1.빈 DataFrame만들기
oldDf = pd.DataFrame(data = [100,200,300], columns = mycolumns, dtype = 'float16')

2. Data가 있는 DataFrame 만들기
nparray = np.array([[1,10,40],[2,20,50],[3,30,60]], dtype = 'float16')
newDf = pd.DataFrame(data = nparray, columns = mycolumns)

3. 쌓아주기
totalDf = pd.concat([oldDf,newDf])

 

 


IV. .txt -> .csv 변환

변환하는 방법이라기엔 사실 두개는 다른 파일이다.

따라서 한 파일의 데이터를 list로 모두 받아 다른 파일로 저장하는 방식인데.

그냥 원래 원하던 파일형식에 처음부터 쓰자.. 어차피 사용방법이 같으니!

+ Recent posts