微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-熊猫:将数据写入MySQL时下降了毫秒

我正在尝试将具有毫秒时间戳的DataFrame放入MySQL数据库.但是,这样做时,毫秒部分似乎被删除了.我创建了一个工作示例来说明发生了什么:

import pandas as pd
from sqlalchemy import create_engine # database connection

#Generate date_time with millisecond resolution and price column
df=pd.DataFrame({'date_time' : pd.date_range('1/1/2000 09:00:00', freq="5ms",periods=100),'price' : np.random.random_sample(100)})

#Connect with an empty MysqL database (which I simply created using CREATE DATABASE Trading_db;)
disk_engine = create_engine("MysqL+MysqLdb://root:"+'MYPASSWORD'+"@localhost/Trading_db")

#Dataframe to sql in a Table called Trading_data
df.to_sql('Trading_data', disk_engine, if_exists='replace',index=False)

#When I read this back from MysqL, the milliseconds seem to dissapear
df_sql = pd.read_sql_query('SELECT *'
                   'FROM Trading_data '
                   'LIMIT 20', disk_engine)

将熊猫创建的DataFrame的日期时间与从MysqL加载的日期进行比较:

df.head()

    date_time                   price
0   2000-01-01 09:00:00         0.371986
1   2000-01-01 09:00:00.005000  0.625551
2   2000-01-01 09:00:00.010000  0.631182
3   2000-01-01 09:00:00.015000  0.625316
4   2000-01-01 09:00:00.020000  0.522437

df_sql.head()

    date_time           price
0   2000-01-01 09:00:00 0.371986
1   2000-01-01 09:00:00 0.625551
2   2000-01-01 09:00:00 0.631182
3   2000-01-01 09:00:00 0.625316
4   2000-01-01 09:00:00 0.522437

您可以清楚地看到毫秒数被丢弃.有什么办法可以更改代码以保留毫秒部分?

编辑:我正在使用MysqL Workbench 6.2和pandas 0.14.1

解决方法:

如注释中所述,您需要MysqL v5.6.4来支持小数秒(docs).
但是,正如docs解释的那样,您需要将其显式指定为DATETIME(fsp),其中fsp是小数秒精度,才能在datetime列中启用它.

to_sql中的认值是仅使用DateTime(sqlalchemy datetime类型).但是,您可以使用dtype参数覆盖此认值,并使用MySQL specific DATETIME类型指定精度:

In [11]: from sqlalchemy.dialects.MysqL import DATETIME

In [12]: df.to_sql('Trading_data', engine, dtype={'date_time': DATETIME(fsp=6)}, if_exists='replace', index=False)

In [13]: df_sql = pd.read_sql_query('SELECT * FROM Trading_data', engine)

In [14]: df_sql.head()
Out[14]:
                   date_time     price
0        2000-01-01 09:00:00  0.152087
1 2000-01-01 09:00:00.005000  0.927375
2 2000-01-01 09:00:00.010000  0.540021
3 2000-01-01 09:00:00.015000  0.499529
4 2000-01-01 09:00:00.020000  0.797420

注意:此dtype参数需要使用熊猫0.15.2.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐