2017-08-10 3 views
1

DataFrame.to_sqlを使用して大きなpandasデータフレームをエクスポートしようとしましたが、データフレームにUnicode文字が含まれていて、一部の列にはエクスポート時に警告が発生し、?Unicode文字でMySQLエクスポートするためのPandas DataFrame

私は(データベースログインを削除)この例で問題を再現するために管理:

import pandas as pd 
import sqlalchemy 
import pymysql 

engine = sqlalchemy.create_engine('mysql+pymysql://{}:{}@{}/{}?charset=utf8'.format(*login_info), encoding='utf-8') 

df_test = pd.DataFrame([[u'\u010daj',2], \ 
         ['čaj',2], \ 
         ['špenát',4], \ 
         ['květák',7], \ 
         ['kuře',1]], \ 
         columns = ['a','b']) 

df_test.to_sql('test', engine, if_exists = 'replace', index = False, dtype={'a': sqlalchemy.types.UnicodeText()}) 

データフレームの最初の2行だけで異なって定義、同じでなければなりません。

私は次の警告を取得し、問題のある文字(čěř)は?としてレンダリングされます。

/usr/local/lib/python3.6/site-packages/pymysql/cursors.py:166: Warning: (1366, "Incorrect string value: '\\xC4\\x8Daj' for column 'a' at row 1") 
    result = self._query(query) 
/usr/local/lib/python3.6/site-packages/pymysql/cursors.py:166: Warning: (1366, "Incorrect string value: '\\xC4\\x8Daj' for column 'a' at row 2") 
    result = self._query(query) 
/usr/local/lib/python3.6/site-packages/pymysql/cursors.py:166: Warning: (1366, "Incorrect string value: '\\xC4\\x9Bt\\xC3\\xA1k' for column 'a' at row 4") 
    result = self._query(query) 
/usr/local/lib/python3.6/site-packages/pymysql/cursors.py:166: Warning: (1366, "Incorrect string value: '\\xC5\\x99e' for column 'a' at row 5") 
    result = self._query(query) 

このように見える結果のデータベーステーブルtestで:

a  b 
?aj  2 
?aj  2 
špenát 4 
kv?ták 7 
ku?e 1 

不思議なことに、žš、およびá文字(および私の完全なデータセット内の他の文字)は、これはUnicode文字のサブセットにしか影響しないようです。上記のように、私は可能な限りutf-8engineDataFrame.to_sql)の設定を試してみました。

答えて

0

pymysql:

import pymysql 
con = pymysql.connect(host='127.0.0.1', port=3306, 
        user='root', passwd='******', 
        charset="utf8mb4") 

SQLAlchemyの:

db_url = sqlalchemy.engine.url.URL(drivername='mysql', host=foo.db_host, 
     database=db_schema, 
     query={ 'read_default_file' : foo.db_config, 'charset': 'utf8mb4' }) 

?http://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored説明において "ベストプラクティス" を参照:

  • 格納されるバイトはUTF8としてエンコードされていません/ utf8mb4。これを修正してください。
  • データベースの列は、CHARACTER SET utf8(またはutf8mb4)です。これを修正してください。
  • また、読み取り中の接続がUTF-8であることを確認してください。

(注:CHARACTER SETsutf8utf8mb4は、ヨーロッパ言語交換可能です)

これらはチェコの文字ですか?

関連する問題