问答交流

【代码报错】m_product()函数计算结果为NaN值

由bqp8687s创建,最终由small_q 被浏览 16 用户

代码如下

import dai

st = '' 

sql = f""" 
select
    date,
    instrument,
    sw2021_level2,
    sw2021_level2_name,
    r_ind,
    r_mkt,
    m_product(r_ind + 1,240)- 1 as r_ind_1y,
    m_product(r_mkt + 1,240)- 1 as r_mkt_1y,
    r_ind - r_mkt as r_std,
    (r_ind_1y - r_mkt_1y) / r_std as IR
from(
    SELECT
        date,
        instrument,
        sw2021_level2,
        sw2021_level2_name,
        turn,
        daily_return,
        float_market_cap,
        daily_return * float_market_cap AS df,
        c_group_sum(sw2021_level2, df) / c_group_sum(sw2021_level2, float_market_cap) AS r_ind,
        SUM(df) OVER () / SUM(float_market_cap) OVER () AS r_mkt
    FROM
        cn_stock_prefactors
    WHERE
        st_status = 0
    AND
        suspended = 0
    AND 
        daily_return IS NOT NULL
    AND
        date BETWEEN '2024-08-01'::timestamp - INTERVAL '360 days' AND '2024-09-01'
    ) as subquery
QUALIFY
    date BETWEEN '2024-08-01' AND '2024-09-01';
        """
df = dai.query(sql).df()

我检测了很多遍一级查询里的数据,没有NAN值了 但是r_ind 和r_mkt的数据还是计算出来为空值。

\

标签

数据处理Python
评论
  • 我这边复现了下,没有遇到你反馈的问题呢
  • https://bigquant.com/codesharev3/1edddbde-cdb9-4bb0-b7c7-54358fccb036
  • 还是有的的,貌似是针对某些个股会出现NAN值,不知道具体原因在哪 。
  • 因为你过滤了st和停牌的股票,有部分股票某段时间停牌或者st了,导致计算时没有那么多的数据,从而计算结果为空。
{link}