数据框中的转移矩阵未传递值
我正在尝试实现一个转移矩阵。
我的数据和转移矩阵都是用Pandas库中的DataFrame格式。
states_mat = pd.DataFrame(None, index=range(0,24), columns=range(0,24))
def states_update(data):
states_vec = data['hr']
# Do nothing if there is no sequence
if len(states_vec) < 2:
return
for i in xrange(1, len(states_vec)):
prev = states_vec[i-1]
curr = states_vec[i]
states_mat[curr][prev] += 1
数据是int64类型。
我发现它没有像我想的那样更新+1的计数。我觉得这可能是某种类型的问题,但我不太确定怎么强制转换类型。我使用DataFrame来处理我的数据,因为我想用分组功能来拆分数据并应用上面的函数。有没有什么建议?
1 个回答
1
好的,第一个问题,也是解决你问题的关键在于,你创建的 states_mat
数据框时,默认值设为了 None
,这会变成 numpy.NaN
。
你不能把一个整数加到 NaN
上:
In [24]:
NaN + 1
Out[24]:
nan
所以你需要把数据框的构建方式改成:
states_mat = pd.DataFrame(0, index=range(0,24), columns=range(0,24))
在这种情况下,使用子索引应该是没问题的,但你也可以用 loc
,这样也能正常工作:
states_mat.loc[curr, prev] += 1