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-8
(engine
、DataFrame.to_sql
)の設定を試してみました。