팬더 DataFrame을 CSV 파일로 작성


714

팬더에 데이터 프레임이 있으며 CSV 파일에 쓰고 싶습니다. 나는 이것을 사용하여 이것을하고있다 :

df.to_csv('out.csv')

그리고 오류가 발생합니다 :

UnicodeEncodeError: 'ascii' codec can't encode character u'\u03b1' in position 20: ordinal not in range(128)

이 문제를 쉽게 해결할 수있는 방법이 있습니까 (예 : 데이터 프레임에 유니 코드 문자가 있음)? 그리고 'to-tab'방법을 사용하여 CSV 대신 탭으로 구분 된 파일에 쓸 수있는 방법이 있습니까?

답변:


1045

탭으로 구분하려면 다음 sep인수를 사용할 수 있습니다 to_csv.

df.to_csv(file_name, sep='\t')

특정 인코딩 (예 : 'utf-8')을 사용하려면 다음 encoding인수를 사용하십시오 .

df.to_csv(file_name, sep='\t', encoding='utf-8')

32
index=False인덱스를 삭제하기 위해 추가 합니다.
Medhat

11
나는 7 년 전에 이미 쓴 질문에 대한 답을 어떻게 찾았는지에 대해 처음에는 혼란 스러웠다.
헤이든

250

메소드를 사용하여 DataFrame오브젝트를 csv 파일 로 저장하는 경우 오브젝트 의 각 이전 색인to_csv 을 저장할 필요가 없습니다 .DataFrame

부울 값을 매개 변수 에 전달하면이를 피할 수 있습니다 .Falseindex

다소 좋아 :

df.to_csv(file_name, encoding='utf-8', index=False)

따라서 DataFrame 객체가 다음과 같은 경우

  Color  Number
0   red     22
1  blue     10

csv 파일은 다음을 저장합니다 :

Color,Number
red,22
blue,10

대신 ( 기본값 True 이 전달 된 경우)

,Color,Number
0,red,22
1,blue,10

인덱싱이 필요하지만 제목도 있어야한다면 어떻게해야합니까? 당신은 그냥 사용 df.rename_axis('index_name')합니까? 파일 자체를 변경하지는 않습니다.
Zap

19

팬더 DataFrame을 CSV 파일에 쓰려면이 필요합니다 DataFrame.to_csv. 이 함수는 합리적인 기본값으로 많은 인수를 제공하므로 특정 사용 사례에 맞게 재정의 할 필요가 없습니다. 예를 들어, 다른 구분 기호를 사용하거나 날짜 / 시간 형식을 변경하거나 기록 할 때 인덱스를 삭제하려고 할 수 있습니다. to_csv이러한 요구 사항을 해결하기 위해 전달할 수있는 인수가 있습니다.

다음은 CSV 파일에 쓰는 몇 가지 일반적인 시나리오와 이에 사용할 수있는 인수를 나열한 표입니다.

CSV 친구에게 쓰기

각주

  1. 기본 구분 기호는 쉼표 ( ',') 로 가정합니다 . 꼭 알 필요가 없으면 변경하지 마십시오.
  2. 기본적으로 색인은 df첫 번째 열로 작성됩니다. DataFrame에 색인이없는 경우 (IOW, df.index기본값이 RangeIndex), index=False쓸 때 설정하려고합니다 . 다른 방법으로 이것을 설명하기 위해 데이터에 색인이있는 index=True경우 기본값을 그대로 사용 하거나 사용하지 않아야합니다 True.
  3. 다른 응용 프로그램이 데이터를 읽는 방법을 알 수 있도록 문자열 데이터를 작성하는 경우이 매개 변수를 설정하는 것이 좋습니다. 또한 UnicodeEncodeError저장하는 동안 발생할 수 있는 잠재적 인 문제를 피할 수 있습니다.
  4. 큰 DataFrame (> 100K 행)을 디스크에 쓰는 경우 압축하는 것이 좋습니다. 출력 파일이 훨씬 작아 질 수 있습니다. OTOH는 쓰기 시간이 증가한다는 것을 의미합니다 (따라서 파일을 압축 해제해야하기 때문에 읽기 시간이 길어집니다).

18

'utf-8'로 인코딩하는 데 문제가 있고 셀 단위로 이동하려면 다음을 시도해보십시오.

파이썬 2

"df"는 DataFrame 객체입니다.

for column in df.columns:
    for idx in df[column].index:
        x = df.get_value(idx,column)
        try:
            x = unicode(x.encode('utf-8','ignore'),errors ='ignore') if type(x) == unicode else unicode(str(x),errors='ignore')
            df.set_value(idx,column,x)
        except Exception:
            print 'encoding error: {0} {1}'.format(idx,column)
            df.set_value(idx,column,'')
            continue

그런 다음 시도하십시오.

df.to_csv(file_name)

다음과 같은 방법으로 열 인코딩을 확인할 수 있습니다.

for column in df.columns:
    print '{0} {1}'.format(str(type(df[column][0])),str(column))

경고 : errors = 'ignore'는 문자를 생략합니다. 예 :

IN: unicode('Regenexx\xae',errors='ignore')
OUT: u'Regenexx'

파이썬 3

for column in df.columns:
    for idx in df[column].index:
        x = df.get_value(idx,column)
        try:
            x = x if type(x) == str else str(x).encode('utf-8','ignore').decode('utf-8','ignore')
            df.set_value(idx,column,x)
        except Exception:
            print('encoding error: {0} {1}'.format(idx,column))
            df.set_value(idx,column,'')
            continue

11

UTF-8 인코딩도 지정하면 이러한 문제가 발생하는 경우가 있습니다. 파일을 읽는 동안 인코딩을 지정하고 파일에 쓰는 동안 동일한 인코딩을 지정하는 것이 좋습니다. 문제가 해결 될 수 있습니다.


7

Windows 에서 전체 경로를 사용하여 파일로 내보내고 파일에 헤더 가있는 경우의 예제 :

df.to_csv (r'C:\Users\John\Desktop\export_dataframe.csv', index = None, header=True) 

utf-8 인코딩탭을 구분 기호 로 사용하여 스크립트가있는 동일한 디렉토리의 폴더에 저장하려는 경우의 예 :

df.to_csv(r'./export/dftocsv.csv', sep='\t', encoding='utf-8', header='true')

7

그것은이 경우에하지 해답이 될 수 있습니다,하지만 난과 같은 오류 메시지가 있었다대로 .to_csv나는 시도 .toCSV('name.csv')( "에러 메시지가 달랐다 SparseDataFrame' object has no attribute 'toCSV'). 그래서 문제가 조밀 dataframe에 dataframe을 설정하여 해결되었다

df.to_dense().to_csv("submission.csv", index = False, sep=',', encoding='utf-8')

사용 .toCSV하지 않은 것처럼 두 번째 오류가 발생했습니다 .to_csv. 밑줄을 잊어 버렸습니다
Kyle C
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.