我有熊猫数据框。我想从一个列中获取一个值,该值基于涉及另外两个列的条件。我正在从第3列中查找值,它是第1列和第2列中最大的距离。
我构建了一个简单的示例:
d = pd.DataFrame({'c1':[.1,3,11.3],'c2':[3,6,.6],'c3':[8,.8,10.9]})
print'data d=\n%s\n' % d
x = float(d.c3[abs(d.c1-d.c2)==max(abs(d.c1-d.c2))].values)
print 'the value of x= \n%s\n' % x
这个示例的输出与我预期的一样:
c1 c2 c3
0 0.1 3.0 8.0
1 3.0 6.0 0.8
2 11.3 0.6 10.9
the value of x=
10.9
我试图将完全相同的逻辑应用到我的原始问题,即类内的大数据帧。代码是:
yInit = float(self.DenFrame.Depth[abs(self.DenFrame.Hper-self.DenFrame.Vper)==max(abs(self.DenFrame.Hper-self.DenFrame.Vper))].values)
但这段代码会产生一个错误:
...
File "C:\Python27\lib\site-packages\pandas-0.9.0-py2.7-win32.egg\pandas\core\series.py", line 73, in wrapper
return Series(na_op(self.values, other.values),
File "C:\Python27\lib\site-packages\pandas-0.9.0-py2.7-win32.egg\pandas\core\series.py", line 59, in na_op
result[mask] = op(x[mask], y[mask])
TypeError: unsupported operand type(s) for -: 'str' and 'str'
我在here中发现,列的类型可能有问题,但深度是numpy.float64
类型,Hper是float
类型,Vper是float
类型,所以我理解它如何应用于我的问题。
从这一点上我不知道该怎么做,因为我知道相同的代码在一种情况下可以工作,但在另一种情况下不行,我无法发现问题。
你的
DenFrame.Hper
和DenFrame.Vper
中有一些字符串。通过检查每个元素的
dtype
或类型可以看到这一点:意味着numpy数组可以包含各种类型,我们可以看到这些类型是什么:
您可以检查哪些条目是字符串:
也许只包括那些漂浮物是有意义的:
或者您可以(如果可能)将它们转换为浮点:
相关问题 更多 >
编程相关推荐