带有日期索引的熊猫数据框->插入MySQL
Posted
技术标签:
【中文标题】带有日期索引的熊猫数据框->插入MySQL【英文标题】:pandas dataframe with Date index -> insert into MySQL 【发布时间】:2015-10-13 12:04:00 【问题描述】:对象df
的类型是pandas.core.frame.DataFrame。
In [1]: type(df)
Out[1]: pandas.core.frame.DataFrame
df
的索引是一个 DatetimeIndex
In [2]: type(df.index)
Out[2]: pandas.tseries.index.DatetimeIndex
con
提供了一个有效的 mysqldb 连接
In [3]: type(con)
Out[3]: MySQLdb.connections.Connection
我无法将此数据框正确输入到 MySQL 数据库中,具体来说,日期字段在使用以下内容时显示为空(以及对此的一些变体)。
df.to_sql( name='existing_table',con=con, if_exists='append', index=True, index_label='date', flavor='mysql', dtype='date': datetime.date)
将这个数据框正确输入到本地 MySQL 数据库中需要哪些步骤,并在数据库中使用“日期”作为日期字段?
【问题讨论】:
这是一个长镜头,这就是为什么我要写评论而不是答案,但如果你使用dtype='date': datetime.datetime
而不是 dtype='date': datetime.date
,它是否有效?如果没有,它只是将null
插入到数据库中还是会引发错误?此外,通过阅读 to_sql
此处的文档:pandas.pydata.org/pandas-docs/stable/generated/…,dtype
似乎是可选的,但如果存在,我相信它应该包含所有列。
进行了更改,但它仍然只是输入空值。两种情况都不会报错
纯 MySQLdb 连接不支持写入数据库。您必须将该连接包装在 SQLAlchemy 引擎中(pandas 将其用于数据库风格的特定差异)。对于普通的 DBAPI 连接,仅支持 sqlite。见pandas.pydata.org/pandas-docs/stable/io.html#io-sql
另外,你用的是什么版本的熊猫?
您必须将您的 pandas 版本至少升级到 0.15 才能将日期正确写入 MySQL 数据库。使用这个旧版本,您确实可以使用 MySQLdb 连接,但没有正确处理日期时间类型。较新的 pandas 版本通过使用 SQLAlchemy 改进了支持(请参阅我之前的评论)。
【参考方案1】:
要将日期时间数据正确写入 SQL,您至少需要 pandas 0.15.0。
从 pandas 0.14 开始,使用 SQLAlchemy 实现 sql 函数来处理数据库风格的特定差异。所以要使用to_sql
,你需要提供一个SQLAlchemy engine而不是一个普通的MySQLdb连接:
from sqlalchemy import create_engine
engine = create_engine('mysql+mysqldb://....')
df.to_sql('existing_table', engine, if_exists='append', index=True, index_label='date')
注意:您不再需要提供风味关键字。
不再支持将数据写入 SQL 的普通 DBAPI 连接,除了 sqlite。
更多详情请见http://pandas.pydata.org/pandas-docs/stable/io.html#io-sql。
【讨论】:
以上是关于带有日期索引的熊猫数据框->插入MySQL的主要内容,如果未能解决你的问题,请参考以下文章