팬더에 데이터 프레임이 있으며 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 대신 탭으로 구분 된 파일에 쓸 수있는 방법이 있습니까?
답변
탭으로 구분하려면 다음 sep
인수를 사용할 수 있습니다 to_csv
.
df.to_csv(file_name, sep='\t')
특정 인코딩 (예 : ‘utf-8’)을 사용하려면 다음 encoding
인수를 사용하십시오 .
df.to_csv(file_name, sep='\t', encoding='utf-8')
답변
메소드를 사용하여 DataFrame
오브젝트를 csv 파일 로 저장하는 경우 오브젝트 의 각 행 의 이전 색인to_csv
을 저장할 필요가 없습니다 .DataFrame
부울 값을 매개 변수 에 전달하면이를 피할 수 있습니다 .False
index
다소 좋아 :
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
답변
팬더 DataFrame을 CSV 파일에 쓰려면이 필요합니다 DataFrame.to_csv
. 이 함수는 합리적인 기본값으로 많은 인수를 제공하므로 특정 사용 사례에 맞게 재정의 할 필요가 없습니다. 예를 들어, 다른 구분 기호를 사용하거나 날짜 / 시간 형식을 변경하거나 기록 할 때 인덱스를 삭제하려고 할 수 있습니다. to_csv
이러한 요구 사항을 해결하기 위해 전달할 수있는 인수가 있습니다.
다음은 CSV 파일에 쓰는 몇 가지 일반적인 시나리오와 이에 사용할 수있는 인수를 나열한 표입니다.
각주
- 기본 구분 기호는 쉼표 (
','
) 로 가정합니다 . 꼭 알 필요가 없으면 변경하지 마십시오.- 기본적으로 색인은
df
첫 번째 열로 작성됩니다. DataFrame에 색인이없는 경우 (IOW,df.index
기본값이RangeIndex
),index=False
쓸 때 설정하려고합니다 . 다른 방법으로 이것을 설명하기 위해 데이터에 색인이있는index=True
경우 기본값을 그대로 사용 하거나 사용하지 않아야합니다True
.- 다른 응용 프로그램이 데이터를 읽는 방법을 알 수 있도록 문자열 데이터를 작성하는 경우이 매개 변수를 설정하는 것이 좋습니다. 또한
UnicodeEncodeError
저장하는 동안 발생할 수 있는 잠재적 인 문제를 피할 수 있습니다.- 큰 DataFrame (> 100K 행)을 디스크에 쓰는 경우 압축하는 것이 좋습니다. 출력 파일이 훨씬 작아 질 수 있습니다. OTOH는 쓰기 시간이 증가한다는 것을 의미합니다 (따라서 파일을 압축 해제해야하기 때문에 읽기 시간이 길어집니다).
답변
‘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
답변
UTF-8 인코딩도 지정하면 이러한 문제가 발생하는 경우가 있습니다. 파일을 읽는 동안 인코딩을 지정하고 파일에 쓰는 동안 동일한 인코딩을 지정하는 것이 좋습니다. 문제가 해결 될 수 있습니다.
답변
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')
답변
그것은이 경우에하지 해답이 될 수 있습니다,하지만 난과 같은 오류 메시지가 있었다대로 .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')
