带有日期索引的熊猫数据框->插入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的主要内容,如果未能解决你的问题,请参考以下文章

从熊猫数据框中插入几何点mysql

熊猫数据框索引 datetime.date 转换为对象 KeyError

熊猫数据框每天重新采样,没有日期时间索引

熊猫数据框每天重新采样,没有日期时间索引

如何在熊猫数据框中舍入日期时间索引?

将具有日期时间索引的行插入数据框