2017-06-02 70 views
0

我被困在Python中的UnicodeEncodeError一段時間。Python MySQL enconding錯誤

下面是我在做什麼:

  1. 我創建了一個數據幀作爲各種分析的結果。總的來說,數據幀有30列,有多種類型的值(int,string,datetime等)。
  2. 我在Azure中創建一個遠程實例的SSH連接,我已經安裝了MySQL。我使用SQLAlchemy創建連接。
  3. 我運行df.to_sql命令,並出現以下錯誤

UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2013' in position 8: ordinal not in range(256)

這樣做,我試過,但它似乎沒有工作。

engine = create_engine('mysql+pymysql://user:[email protected]:%s/db?charset=utf8' % server.local_bind_port)

我已閱讀here,我可以使用u.encode('latin-1', 'replace')。但是,我是否需要執行該操作並遍歷每個String列並對其進行編碼?還是有什麼我可以做的嗎?

任何幫助非常感謝!

+0

你正在使用哪個版本的python? – pshep123

+0

@ pshep123 - 在Azure中我使用Python 2.7.12 - 在我的本地PC中2.7.13 Anaconda 4.4.0 –

+0

謝謝。不幸的是,我無法幫助你,但我自己也在遇到unicode問題,並且通過我最近的研究,已經認識到python 3和python 2處理文本格式的方式不同,因此對於那些更重要的我比我知道哪個版本。在此同時閱讀一些內容:https://docs.python.org/2/howto/unicode.html,可能會有所幫助。 – pshep123

回答

0

這是我想出的解決方案。

我創建了一個編碼我的數據中的不同字符的函數。

def custom_encoder(x): 
    #Check if the value is Unicode 
    if type(x)==type(u''): 
     return x.encode('utf8','ignore') 
    else: 
     return x 

I循環遍歷所有列並編碼所有值。在此之後,MySQL允許寫入數據。