목적
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로 모두 받아 다른 파일로 저장하는 방식인데.
그냥 원래 원하던 파일형식에 처음부터 쓰자.. 어차피 사용방법이 같으니!
'Programming > Python' 카테고리의 다른 글
[Programming][Python] Pyqt Signal (2) | 2021.01.17 |
---|---|
[Programming][Python] Thread 생성방법 (0) | 2021.01.15 |
[Programming][Python]UI제작_Pyqt (0) | 2021.01.15 |
[Programming][Python] Anaconda, Pycharm 세팅, 명령어 (0) | 2021.01.11 |