我正在尝试使用预设数据帧重新创建k-means分析。目前,我正在尝试遍历我的数据帧的每一行(698行)并执行函数(row-mu)** 2,然后确定平方根。以下步骤是将所述函数的平方根与我的2个聚类(mu2或mu4)的平均值进行比较以确定距该点的距离,并将该sqrt数分配给每个分类器,使其更接近...如果我指定哪些行将是我的两个μ参数来操作,我的功能正常工作:
A=[]
B=[]
mu2=df1.loc[5] #in this instance, mu2=(8,10,10,8,7,10,9,7,1)
mu4=df1.loc[245] #in this instance, mu4=(5,1,1,2,2,2,3,1,1)
specificrow=df1.loc[374] #in this instance, specificrow=(3,1,2,1,2,1,2,1,1)
def d(row, mu):
sums=(row-mu)**2
return math.sqrt(sums.sum())
mu2dist=d(specificrow, mu2)
mu4dist=d(specificrow, mu4)
if mu4dist<mu2dist:
A.append(mu2dist)
else:
B.append(mu4dist)
print(A, B)
这样可以正确添加20.25到A
但是,如果我尝试将mu2和mu4分配给数据帧中的随机行:
mu2=df1.ix[np.random.choice(df.index, 1)]
mu4=df1.ix[np.random.choice(df.index, 1)]
相同的代码不起作用
for index, row in df1.iterrows():
mu2dist=d(row, mu2)
mu4dist=d(row, mu4)
if mu4dist<mu2dist:
A.append(mu2dist)
else:
B.append(mu4dist)
print(A, B)
我收到错误消息:
'TypeError: cannot convert the series to <class 'float'>'
回溯还引用了我的d(行,mu)函数,特别是这一行:
return math.sqrt(sums.sum())
我尝试使用.astype()事先将整个df转换为float,但我仍然遇到同样的错误。
如果我打印mu2并且它的类型(每次都明显改变),我得到这个输出:
A2 A3 A4 A5 A6 A7 A8 A9 A10
28 2.0 1.0 1.0 1.0 2.0 1.0 2.0 1.0 1.0 <class
'pandas.core.frame.DataFrame'>
似乎是浮点数,但实际类型只是'pandas dataframe'。如果有人能指引我朝着正确的方向获取这些金额来退回/打印出来,我将非常感激。我仍然需要研究如何保留这些值以便重用,因为我多次重复这个过程以找到最佳质心,但我需要先得到这些值。
由于