大熊猫数据帧减法导致南

时间:2017-03-02 05:24:37

标签: pandas dataframe nan broadcasting

我有一个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

得到相同的结果

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:3)

axis=0需要sub

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