为什么 df.diff 在第 4 列给我 NaN?
why does df.diff give me NaN in the 4 th column?
我有以下代码:
# 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
你知道为什么会这样吗?谢谢
我认为这是一个错误,看看这个 issue。您可以使用以下代码暂时克服这个问题:
df.T.diff().T
你的数据应该是:
df_idx_max.T.diff().T
如果有效请告诉我。
如果将整个数据框转换为浮点数,它应该可以正常工作:
df_idx_max = df_idx_max.astype(float, errors='ignore')
df_ibi = df_idx_max.diff(axis=1)
我有以下代码:
# 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
你知道为什么会这样吗?谢谢
我认为这是一个错误,看看这个 issue。您可以使用以下代码暂时克服这个问题:
df.T.diff().T
你的数据应该是:
df_idx_max.T.diff().T
如果有效请告诉我。
如果将整个数据框转换为浮点数,它应该可以正常工作:
df_idx_max = df_idx_max.astype(float, errors='ignore')
df_ibi = df_idx_max.diff(axis=1)