" ValueError:无法评估长度不等的数字运算"在DataFrame中查找质心时

时间:2015-01-13 18:55:36

标签: python pandas

为什么以下失败?

import pandas as pd
import numpy as np
df = pd.DataFrame({1:[1,2,3,], 2:[4,5,6]},index=np.linspace(0,1,3))
df.T*df.index


ValueError: cannot evaluate a numeric op with unequal lengths

这不应该给我一个记录,其中每个列元素乘以数据帧的索引吗?

奇怪的是,这在我的代码中适用于SOMETIMES。它似乎取决于输入DataFrame。

对于上下文,我想要这样做的原因是我有一个DataFrame,其中索引是位置,元素是权重。我想使用这些权重和位置获得每列的质心。为此,我发现以下公式正在运行(看似合理的结果),但有时DataFrame会破坏它导致上述错误

centroids = (df_mat.T*df_mat.index).T.sum()/df_mat.sum()

1 个答案:

答案 0 :(得分:2)

这并没有回答我原来的问题"错误发生的原因",但用df.index.values替换df.index修复了问题:

import pandas as pd
import numpy as np
df = pd.DataFrame({1:[1,2,3,], 2:[4,5,6]},index=np.linspace(0,1,3))
new_df = df.T*df.index.values
print new_df.T

产生了所需的结果:

     1    2
0.0  0  0.0
0.5  1  2.5
1.0  3  6.0