programing

Pandas DataFrame을 CSV 파일에 쓰기

nasanasas 2020. 10. 3. 10:56
반응형

Pandas DataFrame을 CSV 파일에 쓰기


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

df.to_csv('out.csv')

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

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

이 문제를 쉽게 해결할 수있는 방법이 있습니까 (예 : 데이터 프레임에 유니 코드 문자가 있음)? 그리고 예를 들어 '탭으로'방법을 사용하여 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객체를.

부울 값을 매개 변수 에 전달하여이를 방지 할 수 있습니다 .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.to_csv("out.csv", index=False)

'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 인코딩도 지정하면 때때로 이러한 문제가 발생합니다. 파일을 읽는 동안 인코딩을 지정하고 파일에 쓰는 동안 동일한 인코딩을 지정하는 것이 좋습니다. 이것은 문제를 해결할 수 있습니다.


it could be not the answer for this case, but as I had the same error-message with .to_csv I tried .toCSV('name.csv') and the error-message was different ("'SparseDataFrame' object has no attribute 'toCSV'"). So the problem was solved by turning dataframe to dense dataframe

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

To write a pandas DataFrame to a CSV file, you will need DataFrame.to_csv. This function offers many arguments with reasonable defaults that you will more often than not need to override to suit your specific use case. For example, you might want to use a different separator, change the datetime format, or drop the index when writing. to_csv has arguments you can pass to address these requirements.

Here's a table listing some common scenarios of writing to CSV files and the corresponding arguments you can use for them.

Write to CSV ma dude

Footnotes

  1. The default separator is assumed to be a comma (','). Don't change this unless you know you need to.
  2. By default, the index of df is written as the first column. If your DataFrame does not have an index (IOW, the df.index is the default RangeIndex), then you will want to set index=False when writing. To explain this in a different way, if your data DOES have an index, you can (and should) use index=True or just leave it out completely (as the default is True).
  3. It would be wise to set this parameter if you are writing string data so that other applications know how to read your data. This will also avoid any potential UnicodeEncodeErrors you might encounter while saving.
  4. Compression is recommended if you are writing large DataFrames (>100K rows) to disk as it will result in much smaller output files. OTOH, it will mean the write time will increase (and consequently, the read time since the file will need to be decompressed).

Example of export in file with full path on Windows and in case your file has headers:

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

Example if you have want to store in folder export which is in same directory where your script is with utf-8 encodint and tab as separator:

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

참고URL : https://stackoverflow.com/questions/16923281/writing-a-pandas-dataframe-to-csv-file

반응형