2013-01-22 48 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