【问题标题】:Using pandas.io.sql.read_frame, can I parse_dates, as in read_csv?使用 pandas.io.sql.read_frame,我可以像 read_csv 那样解析日期吗?
【发布时间】: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_frameparse_dates 参数会很棒。
  • 我将此添加到我们的讨论中。感谢您的反馈。
  • 这也与从 SQLite 数据库读取有关,因为 SQLite 没有日期时间列关联(您只需将时间戳存储为 ISO 8601 文本)。

标签: python sql datetime pandas


【解决方案1】:
df = pandas.io.sql.read_frame('sql_query', index=['date_column_name'], con=cnx)

其中date_column_name 是数据库中包含日期元素的列的名称。 sql_query 应该是 select date_column_name, data_column_name from ... 的形式

如果它类似于日期字符串,Pandas(从 0.13+ 开始)会自动将其解析为日期格式。

In [34]: df.index
Out[34]: 
    <class 'pandas.tseries.index.DatetimeIndex'>

【讨论】:

    【解决方案2】:
    data_frame["column"] = pandas.to_datetime(data_frame["column"])
    

    默认情况下应该可以工作,但如果没有,您可以指定选项。请参阅doc

    【讨论】:

      【解决方案3】:

      这个问题现在已经很老了。 pandas 0.10 也很老了。 在最新版本的 pandas 0.16 中,read_frame 方法已被弃用,取而代之的是 read_sql。 即便如此,文档说就像 read_csv 函数一样,它需要一个 parse_dates 参数Pandas 0.16 read_frame

      似乎 parse_dates 参数出现在 0.14 中,同时 read_frame 被贬低了。 read_sql 函数似乎是 read_frame 的重命名,因此只需将您的 pandas 版本更新到 0.14 或更高版本并重命名您的函数即可访问此参数。 这是 read_sql 函数的文档:Pandas 0.16 read_sql

      【讨论】:

        猜你喜欢
        • 2023-03-17
        • 1970-01-01
        • 2021-07-23
        • 2019-01-21
        • 2012-10-28
        • 1970-01-01
        • 2019-04-27
        • 2012-08-01
        相关资源
        最近更新 更多