【发布时间】:2013-02-20 07:36:42
【问题描述】:
我正在使用pandas.io.sql.read_frame直接从数据库中读取data_frame:
cnx = pandas.io.sql.connect(host='srv',user='me',password='pw',database='db')
df = pandas.io.sql.read_frame('sql_query',cnx)
它在检索数据方面效果很好。但我想将其中一列解析为datetime64,类似于从 CSV 文件读取时可以执行的操作,例如:
df2 = pandas.io.read_csv(csv_file, parse_dates=[0])
但是read_frame 没有parse_dates 标志。推荐什么替代方法?
同样的问题也适用于 read_csv 中的index_col,它表示哪个列。应该是索引。有没有推荐的方法来使用 read_frame 做到这一点?
【问题讨论】:
-
我为 pandas 贡献了最新版本的
pandas.io.sql,它仍在进行中,特别是特定数据类型的检测。我预计即将发布的版本将包含重大改进。您可以在此处了解最近的一些讨论:github.com/pydata/pandas/issues/1662 和此处:github.com/pydata/pandas/issues/2717 -
也就是说,对我来说,MySQL TIMESTAMP 列被正确解析为
pd.tslib.Timestamp对象。read_frame有一个index_col参数。您使用的是最新的稳定版 pandas 吗? -
@DanAllan 在 pandas.io.sql 上做得很好!我正在使用 pandas v. '0.10.1' 我试图使用
index_col=[0],就像我使用pandas.io.read_csv一样,但它失败了:KeyError: u'no item named 0'。阅读您的评论后,我尝试了index_col=[key_name_string],它确实有效。此外,由于所需的列索引是日期时间,pandas 现在可以正确地将 DataFrame 识别为具有 DatetimeIndex。所以我的问题解决了,谢谢!但是,在我设置 col.作为索引,DateTime 类型未正确解析,因此pandas.io.sql.read_frame的parse_dates参数会很棒。 -
我将此添加到我们的讨论中。感谢您的反馈。
-
这也与从 SQLite 数据库读取有关,因为 SQLite 没有日期时间列关联(您只需将时间戳存储为 ISO 8601 文本)。
标签: python sql datetime pandas