이전 포스팅에서는 (1) Python의 pandas read_csv() 함수를 사용해서 외부 text, csv 파일을 읽어들이는 방법과, (2) DB connection 해서 DB로 부터 직접 Data를 읽어와서 DataFrame으로 만드는 방법을 소개하였습니다.

 

이번 포스팅에서는 이전과는 반대로 Python의 pandas library 를 사용해서 DataFrame을 csv 파일로 내보내는 방법을 소개하겠습니다.

 

pandas의 DataFrame.to_csv() 함수를 사용합니다.

 

 

먼저 실습에 필요한 Python library를 import 하겠습니다.

 

 

In [51]: import pandas as pd


In [52]: from pandas import DataFrame

 

 

 

 

다음으로, csv 파일로 내보내는데 사용할 간단한 DataFrame을 dict를 사용해서 만들어보겠습니다.

 

 

In [53]: data = {'ID': ['A1', 'A2', 'A3', 'A4', 'A5'],

    ...: 'X1': [1, 2, 3, 4, 5],

    ...: 'X2': [3.0, 4.5, 3.2, 4.0, 3.5]}


In [54]: data_df = DataFrame(data, index=['a', 'b', 'c', 'd', 'e']) # converting to DataFrame


In [55]: data_df

Out[55]:

ID X1 X2

a A1 1 3.0

b A2 2 4.5

c A3 3 3.2

d A4 4 4.0

e A5 5 3.5

 

 

 

 

결측값(Missing Value)을 csv 파일로 내보낼 때 표기 지정하는 매개변수 설명을 위해서, 제일 마지막 행(row)에 결측값을 추가해보겠습니다.

 

 

In [56]: data_df_2 = data_df.reindex(['a', 'b', 'c', 'd', 'e', 'f'])


In [57]: data_df_2 # 'f' : NaN

Out[57]:

ID X1 X2

a A1 1.0 3.0

b A2 2.0 4.5

c A3 3.0 3.2

d A4 4.0 4.0

e A5 5.0 3.5

f NaN NaN NaN

 

 

 

 

자, 이제 'data_df_2' 라는 DataFrame을 to_csv() 를 사용해서 csv 파일로 내보내보겠습니다.

DataFrame.to_csv('path\\file_name.csv', sep=',', na_rep='NaN') 의 형식으로 설정해주면 됩니다.

 

 

In [60]: data_df_2.to_csv('C:\\Documents\\Python\\data_df_2.csv', # file path, file name

    ...: sep=',',   # seperator, delimiter (구분자)

    ...: na_rep='NaN')   # missing data representation (결측값 표기)

 

 

 

 

위에 지정해준 경로에 가서 'data_df_2.csv' 파일을 열어보니 아래처럼 데이터가 잘 들어가 있음을 확인할 수 있습니다.

 

 

 

아래는 디폴트 설정으로서 참고하시기 바랍니다. (아래 디폴트 설정과 다를때만 False 로 명기하면 되며, 그 외에는 별도 명기 필요 없음)

 

header = True (첫번째 줄을 칼럼 이름으로 사용)

columns = 특정 칼럼만 csv 로 쓰기 (내보내기) 할 때 칼럼 이름을 list에 적어줌

index = True (행의 이름 index 도 같이 내보냄. index 내보내기 싫으면 False 명기)

float_format = '%.2f' (예: float8 을 소수점 둘째 자리까지 표기)

encoding = 'utf-8' (on Python 3)

line_terminator = '\n' (엔터로 줄 바꿈)

date_format = None (datetime 객체에 대한 format 설정하지 않음)

 

data_df_2.to_csv('C:/Users/admin/Documents/data_df_x2.csv',

                 sep=',',

                 na_rep='NaN', 

                 float_format = '%.2f', # 2 decimal places

                 columns = ['ID', 'X2'], # columns to write

                 index = False) # do not write index





더 많은 to_csv() 매개변수를 보기 원하면 아래 Reference 사이트를 참고하세요.

 

[Reference] http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html

 

 

반응형
Posted by Rfriend

댓글을 달아 주세요

  1. 익명 2021.03.04 17:42  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  2. csv변환 2021.03.06 20:58  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 제가 file = read_csv와 file.to_csv를 이용하고 파일을 생성하여 같은 레이어에 넣으려고 하는데 계속 오류가 나는데 혹시 주의할점이 있나요?

    csv로 생성시의 오류는 Cast string to float is not supported
    [[node sequential_119/Cast (defined at <ipython-input-352-258c45076cf1>:193) ]] [Op:__inference_train_function_75932]

    Function call stack:
    train_function 이고,

    txt 파일 생성시의 오류는 all the input array dimensions for the concatenation axis must match exactly, but along dimension 0, the array at index 0 has size 250 and the array at index 100 has size 1 입니다...

    그리고 같은파일을 생성해보는 이유는 for문으로 돌려서 파일이름만 바꿔서 몇개의 파일일 때 컴퓨터가 과부화 되는지 보려고 해보는 중입니다!

    • Rfriend 2021.03.06 21:05 신고  댓글주소  수정/삭제

      read_csv 후 데이터셋에서 칼럼별 데이터 유형 확인해보세요. Float 가 아니라 String으로 읽어들인게 있을텐데요, read\csv()에서 칼럼별 데이터 유형을 설정할수도 있고, dataframe으로 일단 불러들인 상태에서 데이터 유형 변환을 할수도 있구요.

      두번째 오류 메시지는 합치려고 하는 array dimension 이 서로 안 맞다는거네요. array shape 확인해보시기 바랍니다.

    • csv변환 2021.03.06 21:30  댓글주소  수정/삭제


      dataframe.astype('float')

      이런식으로 말씀하시는건가요?

      could not convert string to float
      이렇게 오류나네요ㅜ

    • Rfriend 2021.03.06 21:45 신고  댓글주소  수정/삭제

      (옵션1) read_csv() 에서 (9) 데이터 유형 설정하기 참고 :
      https://rfriend.tistory.com/m/250


      (옵션2) 일단 불러온 후, data frame에서 데이터 유형 변환 참고 :
      https://rfriend.tistory.com/m/470

    • csv변환 2021.03.06 21:50  댓글주소  수정/삭제

      확인해보겠습니다 감사합니다

    • csv변환 2021.03.06 22:41  댓글주소  수정/삭제

      value 에러 무시하기로 일단 적용했습니다.. 그리고 합치려고 하는 array dimension이 서로 안 맞다는 오류가 나오는데 저는 크기 정하지 않은 비어있는 list와 array를 선언해주고 거기에 하나씩 추가해주는데 array dimension 다른 이유가 없을것같은데..뭘까요ㅜㅜ

      No columns to parse from file에러가 나올때도 있는데 to_csv로 파일 생성해주면 완전 같은 데이터가 생성되진 않는것같아요..