pandasデータフレームをMySQLdbに挿入する際に問題が発生しました。使用されたサンプルデータとコード、およびそれに続くエラーをリストしました。pandasデータフレームを使用してデータをmysqlに挿入する方法は?
使用したパッケージ
Pandas - 0.22.0
sqlalchemy - 1.2.1
使用されるデータフレーム:
Out[135]:
P_ID S_ID Action Timestamp \
0 Harold 1 Extensions 2017-11-07 03:17:27.342295+00:00
1 Harold 1 Extensions 2017-11-07 03:17:27.447234+00:00
2 Harold 1 Extensions 2017-11-07 03:17:27.552406+00:00
3 Harold 1 Extensions 2017-11-07 03:17:27.657676+00:00
4 Harold 1 Extensions 2017-11-07 03:17:27.762737+00:00
Value
0 -0.096083
1 -0.003894
2 -0.004779
3 0.131210
4 0.161990
dtypes:
P_ID object
S_ID int64
Action object
Timestamp datetime64[ns, UTC]
Value float64
dtype: object
次のコードスニペットが使用され、エラーが発生しました
また、pd.to_datetime()は効果がないようです。
使用されるコード(1)インデックスなし
engine = create_engine('mysql+pymysql://xxxx:3306/xxxx')
test.to_sql(name='table1', con=engine, if_exists = 'append',index=False)
conn.close()
エラー:
ValueError:DatetimeIndexをdtype datetime64 [us]にキャストできません
使用されるコード(2)タイムスタンプ列にインデックスが付けられている
engine = create_engine('mysql+pymysql://xxxx:3306/xxxx')
test.to_sql(name='table1', con=engine, if_exists = 'append',index=True,
index_label='Timestamp',
dtype={'Timestamp':typeTIMESTAMP(timezone=True)})
conn.close()
エラー:
ValueError:インデックス/列に名前が重複しています:タイムスタンプを挿入できません。既に存在します
どういうわけか、MySQLを使用するこのAPIはUTCタイムスタンプを受け入れないようです。
私のために働いた解決策:
test['Timestamp']=test['Timestamp'].apply(lambda x:datetime.replace(x,tzinfo=None))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加