首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使日期列在postgres而不是Python中的数据探索中更具吸引力?

如何使日期列在postgres而不是Python中的数据探索中更具吸引力?
EN

Stack Overflow用户
提问于 2020-11-13 14:39:29
回答 1查看 20关注 0票数 0

我有一个使用Plotly-Dash制作的股票市场数据图表。我画x表示日期,y表示价格。在将x数据绘制为日期时,标签对于数据探索来说总是不可靠和奇怪的。

例如:

如您所见,x轴是一系列年份中的1月和7月。这是自然自动生成的,对于用户体验来说看起来并不好。如果有Q1 2015,Q2 2015,或者2016冬季,2016夏季等会更好……

在Python中,我可以通过编辑数据帧来做到这一点,如下所示:

代码语言:javascript
复制
for column in lst:
    column.loc[column["month_int"] == 1, "month"] = "January"
    column.loc[column["month_int"] == 2, "month"] = "February"
    column.loc[column["month_int"] == 3, "month"] = "March"
    column.loc[column["month_int"] == 4, "month"] = "April"
    column.loc[column["month_int"] == 5, "month"] = "May"
    column.loc[column["month_int"] == 6, "month"] = "June"
    column.loc[column["month_int"] == 7, "month"] = "July"
    column.loc[column["month_int"] == 8, "month"] = "August"
    column.loc[column["month_int"] == 9, "month"] = "September"
    column.loc[column["month_int"] == 10, "month"] = "October"
    column.loc[column["month_int"] == 11, "month"] = "November"
    column.loc[column["month_int"] == 12, "month"] = "December"
    
# Or like this     

for column in lst2:
    column.loc[(column['month_int'] > 2) & (column['month_int'] <= 5), 'Season'] = 'Spring'
    column.loc[(column['month_int'] > 5) & (column['month_int'] <= 8), 'Season'] = 'Summer'
    column.loc[(column['month_int'] > 8) & (column['month_int'] <= 11), 'Season'] = 'Autumn'
    column.loc[column['month_int'] <= 2, 'Season'] = 'Winter'
    column.loc[column['month_int'] == 12, 'Season'] = 'Winter

如果不是Postgres,还有什么等价物呢?我正在尝试学习更多SQL技巧,并替换不必要的python代码。作为参考,下面是我的查询

代码语言:javascript
复制
SELECT symbol, date, adj_close 
FROM api.security_price 
WHERE security_price.symbol IN %s AND date > (SELECT MAX(date) FROM api.security_price) - interval '5 years' 
ORDER by date;
EN

回答 1

Stack Overflow用户

发布于 2020-11-13 14:55:29

要获取月份,可以使用postgres中的TO_CHAR函数。

代码语言:javascript
复制
select symbol, date, to_char(date, 'Month') as month, adj_close from api.security_price 
WHERE security_price.symbol IN %s AND date > (SELECT MAX(date) FROM api.security_price) - interval '5 years' 
ORDER by date;

参考:https://www.postgresql.org/docs/current/functions-formatting.html

类似地,您还可以为特殊情况定义自己的sql查询函数。参考:https://www.postgresql.org/docs/current/xfunc-sql.html

对于季节,另一种简单的方法是让另一列包含month_int到季节的映射,并在输出数据上与该表进行左连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64816541

复制
相关文章

相似问题

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