为什么df.diff在第四列给我NaN?

时间:2018-07-26 13:16:42

标签: python pandas dataframe diff

我有以下代码:

# create dataframes for the lists of arrays (df_Avg_R), list of maxima 
    # (df_peaks) and for the inter-beat-intervals (df_ibi)
    df_Avg_R = pd.DataFrame(Avg_R_val)
    df_idx_max = pd.DataFrame(idx_of_max)
    # delete first and last maxima
    df_idx_max.drop([0, 11], axis=1, inplace=1)
    df_ibi = df_idx_max.diff(axis=1)

df_idx_max是以下数据帧(仅第一行):

         1    2    3      4      5      6      7      8      9   10
0    55   92  132  181.0  218.0  251.0    NaN    NaN    NaN NaN
1    84  140  198  235.0  251.0    NaN    NaN    NaN    NaN NaN
2    47   64  103  123.0  185.0  251.0    NaN    NaN    NaN NaN
3    58  102  146  189.0  251.0    NaN    NaN    NaN    NaN NaN
4    53   96  139  182.0  201.0  225.0  251.0    NaN    NaN NaN
5    46   89  131  173.0  215.0  251.0    NaN    NaN    NaN NaN
6    67  121  161  175.0  231.0  251.0    NaN    NaN    NaN NaN
7    52  109  165  206.0  220.0  251.0    NaN    NaN    NaN NaN
8    80  135  191  251.0    NaN    NaN    NaN    NaN    NaN NaN
9    38   83  139  188.0  251.0    NaN    NaN    NaN    NaN NaN
10   33   73  113  161.0  205.0  251.0    NaN    NaN    NaN NaN
11   54   81  126  153.0  180.0  204.0  251.0    NaN    NaN NaN
12   44   64  116  160.0  206.0  251.0    NaN    NaN    NaN NaN
13   56  109  165  220.0  251.0    NaN    NaN    NaN    NaN NaN
14   43  100  124  155.0  211.0  251.0    NaN    NaN    NaN NaN

但是,命令df_ibi = df_idx_max.diff(axis = 1)在所有 df_ibi的第4列

  1     2     3   4     5     6     7     8     9   10
0   NaN  37.0  40.0 NaN  37.0  33.0   NaN   NaN   NaN NaN
1   NaN  56.0  58.0 NaN  16.0   NaN   NaN   NaN   NaN NaN
2   NaN  17.0  39.0 NaN  62.0  66.0   NaN   NaN   NaN NaN
3   NaN  44.0  44.0 NaN  62.0   NaN   NaN   NaN   NaN NaN
4   NaN  43.0  43.0 NaN  19.0  24.0  26.0   NaN   NaN NaN
5   NaN  43.0  42.0 NaN  42.0  36.0   NaN   NaN   NaN NaN
6   NaN  54.0  40.0 NaN  56.0  20.0   NaN   NaN   NaN NaN
7   NaN  57.0  56.0 NaN  14.0  31.0   NaN   NaN   NaN NaN
8   NaN  55.0  56.0 NaN   NaN   NaN   NaN   NaN   NaN NaN
9   NaN  45.0  56.0 NaN  63.0   NaN   NaN   NaN   NaN NaN
10  NaN  40.0  40.0 NaN  44.0  46.0   NaN   NaN   NaN NaN
11  NaN  27.0  45.0 NaN  27.0  24.0  47.0   NaN   NaN NaN
12  NaN  20.0  52.0 NaN  46.0  45.0   NaN   NaN   NaN NaN
13  NaN  53.0  56.0 NaN  31.0   NaN   NaN   NaN   NaN NaN
14  NaN  57.0  24.0 NaN  56.0  40.0   NaN   NaN   NaN NaN

您知道为什么会这样吗?谢谢

2 个答案:

答案 0 :(得分:0)

我认为这就像一个错误,请看一下issue。您可以使用以下代码暂时解决此问题:

df.T.diff().T

您的数据应该是:

df_idx_max.T.diff().T

让我知道它是否有效。

答案 1 :(得分:0)

如果将整个数据框转换为浮点数,则它应该可以正常工作:

df_idx_max = df_idx_max.astype(float, errors='ignore')

df_ibi = df_idx_max.diff(axis=1)