gpt4 book ai didi

python - 来自 SQL 查询的 Pandas DataFrame : difference in dates is wrongly displayed

转载 作者:行者123 更新时间:2023-11-29 12:09:51 25 4
gpt4 key购买 nike

给定 Redshift (PostgreSQL) 中的一个表,其中包含一个名为 created_at 的列,其类型是 timestamptz,例如 2015-04-01 07:08:32.631+00。

我编写了一个查询来计算任意两对有序行(在此字段上排序)之间的天数差异。查询是

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

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

我从 SQL UI 中得到了这些结果:

enter image description here

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

import pandas as pd

df = pd.read_sql_query(q, engine)

其中 q 是上面的查询字符串,尽管 day_diff 是正确的,但 diff 列始终显示“0 days 00:00:00”,就好像它以某种方式转换了一样这是不对的。 engine var 来自 sqlalchemy.create_engine(connection_string) 我用它来连接到数据库。

最佳答案

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

假设您有 DataFrame df:

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)

关于python - 来自 SQL 查询的 Pandas DataFrame : difference in dates is wrongly displayed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41978297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com