Python 为什么我会得到NaN值?

Python 为什么我会得到NaN值?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有以下代码: data1 = data1.set_index('Date') data1['ret'] = 1 - data1['Low'].div(data1['Close'].shift(freq='1d')) data1['ret'] = data1['ret'].astype(float)*100 由于某种原因,在列ret上,我得到了NaN值: High Low Open Close Volume Adj Close ret Date

我有以下代码:

data1 = data1.set_index('Date')
data1['ret'] = 1 - data1['Low'].div(data1['Close'].shift(freq='1d'))
data1['ret'] = data1['ret'].astype(float)*100
由于某种原因,在列
ret
上,我得到了
NaN
值:

    High    Low Open    Close   Volume  Adj Close   ret
Date                            
2020-01-24  3333.179932 3281.530029 3333.100098 3295.469971 3707130000  3295.469971 1.323394
2020-01-27  3258.850098 3234.500000 3247.159912 3243.629883 3823100000  3243.629883 NaN
2020-01-28  3285.780029 3253.219971 3255.350098 3276.239990 3526720000  3276.239990 -0.295659
2020-01-29  3293.469971 3271.889893 3289.459961 3273.399902 3584500000  3273.399902 0.132777
2020-01-30  3285.909912 3242.800049 3256.449951 3283.659912 3787250000  3283.659912 0.934803
2020-01-31  3282.330078 3214.679932 3282.330078 3225.520020 4527830000  3225.520020 2.100704
2020-02-03  3268.439941 3235.659912 3235.659912 3248.919922 3757910000  3248.919922 NaN
2020-02-04  3306.919922 3280.610107 3280.610107 3297.590088 3995320000  3297.590088 -0.975407
2020-02-05  3337.580078 3313.750000 3324.909912 3334.689941 4117730000  3334.689941 -0.490052
2020-02-06  3347.959961 3334.389893 3344.919922 3345.780029 3868370000  3345.780029 0.008998
2020-02-07  3341.419922 3322.120117 3335.540039 3327.709961 3730650000  3327.709961 0.707157
2020-02-10  3352.260010 3317.770020 3318.280029 3352.090088 3450350000  3352.090088 NaN
2020-02-11  3375.629883 3352.719971 3365.870117 3357.750000 3760550000  3357.750000 -0.018791
2020-02-12  3381.469971 3369.719971 3370.500000 3379.449951 3926380000  3379.449951 -0.356488
2020-02-13  3385.090088 3360.520020 3365.899902 3373.939941 3498240000  3373.939941 0.560148
2020-02-14  3380.689941 3366.149902 3378.080078 3380.159912 3398040000  3380.159912 0.230888
2020-02-18  3375.010010 3355.610107 3369.040039 3370.290039 3746720000  3370.290039 NaN
2020-02-19  3393.520020 3378.830078 3380.389893 3386.149902 3600150000  3386.149902 -0.253392
2020-02-20  3389.149902 3341.020020 3380.449951 3373.229980 4007320000  3373.229980 1.332779
2020-02-21  3360.760010 3328.449951 3360.500000 3337.750000 3899270000  3337.750000 1.327512
2020-02-24  3259.810059 3214.649902 3257.610107 3225.889893 4842960000  3225.889893 NaN
2020-02-25  3246.989990 3118.770020 3238.939941 3128.209961 5591510000  3128.209961 3.320630
2020-02-26  3182.510010 3108.989990 3139.899902 3116.389893 5478110000  3116.389893 0.614408
2020-02-27  3097.070068 2977.389893 3062.540039 2978.760010 7058840000  2978.760010 4.460289
2020-02-28  2959.719971 2855.840088 2916.899902 2954.219971 8563850000  2954.219971 4.126547
2020-03-02  3090.959961 2945.189941 2974.280029 3090.229980 6376400000  3090.229980 NaN
2020-03-03  3136.719971 2976.629883 3096.459961 3003.370117 6355940000  3003.370117 3.676105
2020-03-04  3130.969971 3034.379883 3045.750000 3130.120117 5035480000  3130.120117 -1.032499
2020-03-05  3083.040039 2999.830078 3075.699951 3023.939941 5575550000  3023.939941 4.162461
2020-03-06  2985.929932 2901.540039 2954.199951 2972.370117 6552140000  2972.370117 4.047696
2020-03-09  2863.889893 2734.429932 2863.889893 2746.560059 8423050000  2746.560059 NaN
2020-03-10  2882.590088 2734.000000 2813.479980 2882.229980 7635960000  2882.229980 0.457301
2020-03-11  2825.600098 2707.219971 2825.600098 2741.379883 7374110000  2741.379883 6.072035
2020-03-12  2660.949951 2478.860107 2630.860107 2480.639893 8829380000  2480.639893 9.576191
2020-03-13  2711.330078 2492.370117 2569.989990 2711.020020 8258670000  2711.020020 -0.472871
2020-03-16  2562.979980 2380.939941 2508.590088 2386.129883 7781540000  2386.129883 NaN
2020-03-17  2553.929932 2367.040039 2425.659912 2529.189941 8358500000  2529.189941 0.800034
2020-03-18  2453.570068 2280.520020 2436.500000 2398.100098 8755780000  2398.100098 9.831999
2020-03-19  2466.969971 2319.780029 2393.479980 2409.389893 7946710000  2409.389893 3.265922
2020-03-20  2453.010010 2295.560059 2431.939941 2304.919922 9044690000  2304.919922 4.724426
2020-03-23  2300.729980 2191.860107 2290.709961 2237.399902 7402180000  2237.399902 NaN
2020-03-24  2449.709961 2344.439941 2344.439941 2447.330078 7547350000  2447.330078 -4.784126
2020-03-25  2571.419922 2407.530029 2457.770020 2475.560059 8285670000  2475.560059 1.626264
2020-03-26  2637.010010 2500.719971 2501.290039 2630.070068 7753160000  2630.070068 -1.016332
2020-03-27  2615.909912 2520.020020 2555.870117 2541.469971 6194330000  2541.469971 4.184301
2020-03-30  2631.800049 2545.280029 2558.979980 2626.649902 5746220000  2626.649902 NaN

为什么我会得到NaN?

缺少值的原因是如果与
freq='d'
一起使用,它会连续计算每一天的频率

因此,存在缺少一些值的
DatetimeIndex
,因为删除了周末日期时间,所以
Monday
s日期时间是从不存在的
Sunday
s开始的计数,输出是
NaN
s

解决方案是使用以下方法将其移除:

data1 = data1.set_index('Date')
data1['ret'] = 1 - data1['Low'].div(data1['Close'].shift())
data1['ret'] = data1['ret'].astype(float)*100

然后下一个
星期一
s使用上一个
星期五
s的值。

原因是索引中没有连续的日期时间。你是对的,因为
(freq='1d')
所以也许我应该用.shift(0)替换它?如果不需要按连续的日期时间移位,那么是的.hmmm,我想这里应该被删除
(freq='1d'))
并仅使用
shift()
,然后下周一使用上周五的值。首先测试它,但我认为它应该工作得很好。@jezrael是的,修复了它!