首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas DataFrame from SQL query:日期差异显示错误

Pandas DataFrame from SQL query:日期差异显示错误
EN

Stack Overflow用户
提问于 2017-02-01 19:10:58
回答 1查看 159关注 0票数 2

给出Redshift (PostgreSQL)中的一个表,其中包含一个名为created_at的列,它的类型是一个时间戳,例如,看起来像2015-04-01 07:08:32.631+00。

我编写了一个查询来计算任意两对有序行(按此字段排序)之间的差异(以天为单位)。查询为

代码语言:javascript
复制
SELECT created_at, 
       created_at - LAG(created_at) OVER(ORDER BY created_at ASC) AS diff, 
       EXTRACT('day' FROM created_at - LAG(created_at) OVER(ORDER BY created_at ASC)) AS day_diff
FROM
  (SELECT MAX(created_at) as created_at
   FROM table 
   GROUP BY created_at)
ORDER BY created_at ASC

我需要获取字段的最大值,因为可能有多个行具有相同的值,所以这是一种获取一个值的方法。

我从一个SQL UI中得到了以下结果:

现在,当我运行相同的查询并构建DataFrame时,

代码语言:javascript
复制
import pandas as pd

df = pd.read_sql_query(q, engine)

其中diff是上面的查询字符串,我知道尽管day_diff是正确的,但diff列始终显示‘0day 00:00:00',就好像它经过了某种转换,但它是错误的。engine变量来自sqlalchemy.create_engine(connection_string),我用它来连接数据库。

EN

回答 1

Stack Overflow用户

发布于 2017-02-01 22:21:16

如果你能像我在评论中描述的那样获得秒数,你就可以将它们转换成所需的格式。

假设您有自己的DataFrame df:

代码语言:javascript
复制
def format_seconds(seconds):
    days, reminder = divmod(seconds, 60*60*24)
    hours, reminder = divmod(reminder, 60*60)
    minutes, reminder = divmod(reminder, 60)
    return "%d days %02d:%02d:%02d" % (days, hours, minutes, reminder)

df['formated_diff'] = df['diff'].apply(format_seconds)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41978297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档