pandas 数据帧减法导致 nan

pandas dataframe subtraction causing nan

我有一个 pandas 数据框:

>>> X_df.shape
Out[35]: (177, 2762)
>>> X_df.ix[0:5,1000:1005]
Out[40]: 
              1000    1001    1002    1003    1004    1005
2016-01-04 119.225     nan     nan     nan     nan     nan
2016-01-05 119.225 119.189 119.177 119.160 119.203 119.220
2016-01-06 119.175 119.175     nan 119.204 119.208 119.221
2016-01-07 118.532     nan 118.542 118.529     nan 118.534
2016-01-08 117.861 117.820 117.762     nan 117.686 117.709

我创建每行的一阶差分的均值:

>>> mu = (X_df.diff(1,axis=1)).mean(axis=1)
>>> mu.head()
Out[42]: 
2016-01-04   -0.001
2016-01-05   -0.001
2016-01-06   -0.000
2016-01-07   -0.000
2016-01-08   -0.000
dtype: float64

然后如果我尝试从每个值中减去这个平均值,我得到所有 nans:

>>> (X_df.diff(1,axis=1)-mu).ix[0:5,1000:1005]
Out[51]: 
            1000  1001  1002  1003  1004
2016-01-04   nan   nan   nan   nan   nan
2016-01-05   nan   nan   nan   nan   nan
2016-01-06   nan   nan   nan   nan   nan
2016-01-07   nan   nan   nan   nan   nan
2016-01-08   nan   nan   nan   nan   nan

不同的减法方式

>>> ((X_df.diff(1,axis=1).subtract(mu,axis=1))).ix[0:5,1000:1005]
Out[52]: 
            1000  1001  1002  1003  1004
2016-01-04   nan   nan   nan   nan   nan
2016-01-05   nan   nan   nan   nan   nan
2016-01-06   nan   nan   nan   nan   nan
2016-01-07   nan   nan   nan   nan   nan
2016-01-08   nan   nan   nan   nan   nan

我使用 mu[:,] 而不是 mu

得到相同的结果

有办法解决这个问题吗?

你需要 subaxis=0:

a = (X_df.diff(1,axis=1))
print (a)
            1000   1001   1002   1003   1004   1005
2016-01-04   NaN    NaN    NaN    NaN    NaN    NaN
2016-01-05   NaN -0.036 -0.012 -0.017  0.043  0.017
2016-01-06   NaN  0.000    NaN    NaN  0.004  0.013
2016-01-07   NaN    NaN    NaN -0.013    NaN    NaN
2016-01-08   NaN -0.041 -0.058    NaN    NaN  0.023

print (a.sub(a.mean(axis=1), axis=0))
#sub same as subtract, only less typing
#print (a.subtract(a.mean(axis=1), axis=0))
            1000      1001      1002   1003      1004      1005
2016-01-04   NaN       NaN       NaN    NaN       NaN       NaN
2016-01-05   NaN -0.035000 -0.011000 -0.016  0.044000  0.018000
2016-01-06   NaN -0.005667       NaN    NaN -0.001667  0.007333
2016-01-07   NaN       NaN       NaN  0.000       NaN       NaN
2016-01-08   NaN -0.015667 -0.032667    NaN       NaN  0.048333