2017-06-02 5 views
0

私はしばらくの間、PythonでUnicodeEncodeErrorと立ち往生しています。Python MySQLのエンコンディングエラー

  1. を、私は様々な分析の結果、データフレームを作成します。ここでは

    は私がやっているものです。合計で、データフレームには複数のタイプの値(int,string,datetimeなど)を持つ30個の列があります。

  2. MySQLをインストールしたAzureのリモートインスタンスへのSSH接続を作成します。 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)

私はu.encode('latin-1', 'replace')を使用することができhere読みました。しかし、私はそれを実行し、すべてのString列を通過し、それをエンコードする必要がありますか?それとも私は何かできることがありますか?

ご協力いただきありがとうございます。

+0

使用しているPythonのバージョンは? – pshep123

+0

@ pshep123 - Azureでは、私はPython 2.7.12を使用しています - 私のローカルPCで2.7.13 Anaconda 4.4.0 –

+0

ありがとう。残念ながら、私はあなたを助けることはできませんが、私は自分自身と私の最近の研究を通して、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 

私はすべての列をループし、すべての値を符号化しました。その後、MySQLはデータの書き込みを許可しました。