2013-01-22 59 views
2

我有熊猫DataFrame。我想根据涉及两列的条件从列中获取单个值。我要寻找的值从栏3为这是在列1的最大距离和2熊猫数据框操作中不支持的操作数

我建立简单的例子,其工作原理:

​​

从这个例子的输出是如我所料:

 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,所以我明白它如何适用于我的问题。

从这一点我不知道该怎么办,因为我了解相同的代码在一个案件中起作用,但在另一个案件中不起作用,我无法发现问题。

+0

要确认,'DenFrame.Hper.dtype'和'DenFrame .Ver.dtype'是float64? –

+0

当我使用:'print self.DenFrame.Hper.dtype'输出是'object'。对于'print type(self.DenFrame.Hper)',输出是''里面的所有位置都是'float'(我有点丢失这个类型) – tomasz74

+1

那么' DenFrame.Vper.dtype',那么'DenFrame.Hper.map(type).unique()'的输出是什么(对于'Vper'也是一样的)。 –

回答

8

您的DenFrame.HperDenFrame.Vper中有一些字符串。

In [11]: df.Hper.dtype 
Out[11]: dtype('object') 

意思是说,numpy的阵列可以包含多种类型,我们可以看到这些类型:

您可以通过检查dtype各元素的类型见本

In [12]: DenFrame.Hper.map(type).unique() 
Out[12]: [<type 'float'> <type 'str'>] 

你可以检查哪些条目是字符串:

DenFrame[DenFrame.Hper.map(type) == str] 

也许我牛逼有道理只包括那些彩车:

DenFrame_floats = DenFrame[(DenFrame.Hper.map(type) == float) & 
          (DenFrame.Vper.map(type) == float)] 

,或者你可以(如果可能的话),并将其转换为浮动:

DenFrame.Hper = DenFrame.Hper.apply(float) 
+2

你在这里做得很好。 – tomasz74