我正在使用python 3,我想使用距离公式来绘制相对于名为JCFI的文件的x,y,z分量的差异。与之比较的另一个文件称为CALV。我使用熊猫将它们都导入为数据框,然后将它们拆分成相同的长度,并且每个文件中的日期都匹配。
这是我正在尝试的。
#matching dates between JCFI and CALV
date = JCFIdf.iloc[:1694,:1]
xcomp = JCFIdf.iloc[:1694,1:2]
ycomp = JCFIdf.iloc[:1694,2:3]
zcomp = JCFIdf.iloc[:1694,3:4]
xcomp2 = CALVdf.iloc[201:1520,1:2]
ycomp2 = CALVdf.iloc[201:1520,2:3]
zcomp2 = CALVdf.iloc[201:1520,3:4]
diffx = (xcomp2 - xcomp)
diffy = (ycomp2 - ycomp)
diffz = (zcomp2 - zcomp)
#compute distance
distance = sqrt((diffx)**2 + (diffy)**2 + (diffz)**2)
print(distance)
我得到的错误是 “ TypeError:必须为实数,而不是DataFrame”
所以我想知道我是否必须以某种方式从数据框中提取所有值才能放入距离公式中,或者熊猫中是否有一个函数可以使我完成这项工作?
答案 0 :(得分:0)
这是使用numpy的矢量化解决方案:
import pandas as pd
import numpy as np
dist = np.sqrt((df.xcomp - df.xcomp2) ** 2 +
(df.ycomp - df.ycomp2) ** 2 +
(df.zcomp - df.zcomp2) ** 2)
#if you want to put the result in df
df['dist'] = pd.Series(dist)