ホームページ  >  記事  >  バックエンド開発  >  Python は Pandas を使用して CSV ファイルを読み取り、MySQL に書き込みます

Python は Pandas を使用して CSV ファイルを読み取り、MySQL に書き込みます

高洛峰
高洛峰オリジナル
2017-03-24 17:09:024920ブラウズ

最近、Python を使用して CSV を読み書きしてデータベースを保存するときに遭遇したさまざまな問題をまとめてみましょう。

推奨される関連する mysql ビデオ チュートリアル: "mysql チュートリアル"

アップロードされたコード:

reload(sys)
sys.setdefaultencoding('utf-8')
host = '127.0.0.1'
port = 3306
db = 'world'
user = 'root'
password = '123456'

con = MySQLdb.connect(host=host,charset="utf8",port=port,db=db,user=user,passwd=password)
try:
    df = pd.read_sql(sql=r'select * from city', con=con)
    df.to_sql('test',con=con,flavor='mysql')
except Exception as e:
    print(e.message)

予期しないことが何も起こらない場合は、次のように出力されます: データベース フレーバー MySQL はサポートされていません
stackoverflow で答えを見つけました: フレーバー「mysql」は pandas バージョン 0.19 で非推奨になりました。

別の方法に変更しましょう:

reload(sys)
sys.setdefaultencoding('utf-8')
host = '127.0.0.1'
port = 3306
db = 'world'
user = 'root'
password = '123456'

engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s") % (user, password, host, db))

try:
    df = pd.read_sql(sql=r'select * from city', con=engine)
    df.to_sql('test',con=engine,if_exists='append',index=False)
except Exception as e:
    print(e.message)

実行してください。DataFrame のインデックスを列として保存するかどうかを示すインデックス パラメーターを保存できます。必要ないので、値を False に代入します

これで問題は解決したように見えますが、まだ小さな問題が残っています。
中国語の文字を含む CSV ファイルがあるとします (私のウィンドウ):
名前 年齢 クラス
Xiao Ming 15 1年生
Xiao Zhang 18 3年生

engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s") % (user, password, host, db))

try:
    df = pd.read_csv(r'C:\Users\xx\Desktop\data.csv')
    print(df)
    df.to_sql('test', con=engine, if_exists='append', index=False)
except Exception as e:
    print(e.message)

印刷後に文字化けが発生します。 CSV を読み取るときは、エンコーディングを指定するのが最善です。私のローカル GBK:

df = pd.read_csv(r'C:\Users\xx\Desktop\data.csv',encoding='gbk')

情報は正常に出力できますが、エラーは次のとおりです:

UnicodeEncodeError: 'latin-1' codec can位置 0-1 の文字をエンコードしません: 序数が範囲 (256) にありません

その理由は、データベースに保存するときにエンコードを指定しなかったためです。私もこの問題を解決しようとしていたときに騙されました。インターネット上にあるものはすべて入手可能です。プロセスには立ち入りません。コードを見てください:

engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s?charset=utf8") % (user, password, host, db))

解決済み

関連記事:

Pythonデータ分析のための実際のIPリクエストPandasの詳細な説明

Pandasによるcdnログ分析の詳細な説明Python のライブラリ

Python の pandas フレームワークを使用して Excel ファイル内のデータを操作するチュートリアル

以上がPython は Pandas を使用して CSV ファイルを読み取り、MySQL に書き込みますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。