logo
Loading...

讀取csv出現UnicodeDecodeError: 'utf-8' codec can't decode byte 0x85 in position 59: invalid start byte錯誤 - Cupoy

您好,想請問HW6中,我想使用pd.read_csv()讀取'HomeCredit_columns_...

ml100-2,ml100-2-d06

讀取csv出現UnicodeDecodeError: 'utf-8' codec can't decode byte 0x85 in position 59: invalid start byte錯誤

2019/05/11 下午 10:07
機器學習共學討論版
Winnie Jheng
觀看數:193
回答數:1
收藏數:0
ml100-2
ml100-2-d06

您好,想請問HW6中,我想使用pd.read_csv()讀取'HomeCredit_columns_description.csv'這個檔案時,出現:


UnicodeDecodeError: 'utf-8' codec can't decode byte 0x85 in position 59: invalid start byte


以上錯誤訊息,因此我想在程式後加上自訂的encoding參數,但不知道如何判斷該用什麼好,請問要如何判斷此csv應使用什麼encoding方式呢?感謝您。

回答列表

  • 2019/05/11 下午 11:12
    張維元 (WeiYuan)
    贊同數:2
    不贊同數:0
    留言數:1

    嗨,這個部分是讀檔的時候預設的編碼方式跟實際內容不同導致的錯誤。有可能是作業系統環境的差異導致。不管你是用 Python 原生的 open/read 或是 Pandas 提供的 read_csv 方法,都可以再開檔的時候指定 encoding 參數。


    假設要使用 utf-8 編碼方式存取檔案,使用方法如下:


    ```

    encoding = 'utf-8'  

    # 法一  

    f =open('filename.txt','r', encoding=encoding)  

    text = f.read() 

    f.close()  


    # 法二 

    df = pd.read_csv('filename.csv',encoding=encoding)  

    ```


    另外一種常見的問題是,可能不知道原始檔案的編碼方式為何,可以透過 chardet 工具來查詢:


    ```

    import chardet 

    with open('filename.txt','rb') as f:   

       result = chardet.detect(f.read()) 

    ```



    最後科普一下幾種常見的編碼格式:


    * Unicode/UTF8:萬國碼,可支援多種語言的編碼格式

    * ISO-8859-1/latin1:主要用於歐系國家的文字

    * Big5:繁體中文

    * GBK:簡體中文

    * cp950:windows 預設的編碼