2017-04-16 55 views
0

我有一個數據幀的數據是這樣的:問題而dataframes在大熊貓比較FLOAT32對象

>>> data.head(10) 
       stock pop ma order 
Date 
2016-01-04 325.316 82.0 NaN  -1 
2016-01-11 320.036 83.0 NaN  -1 
2016-01-18 299.169 79.0 82.5  -1 
2016-01-25 296.579 84.0 81.0  -1 
2016-02-01 295.334 82.0 81.5  -1 
2016-02-08 309.777 81.0 83.0  -1 
2016-02-15 317.397 75.0 81.5  -1 
2016-02-22 328.005 80.0 78.0  -1 
2016-02-29 315.504 81.0 77.5  -1 
2016-03-07 328.802 81.0 80.5  -1 

所以我想比較data.po與data.ma.If寶是比馬大,然後爲了更大會是-1,如果po小於ma,那麼它是1.我爲它寫了下面的代碼。

data['order'][data.pop > data.ma] = -1 
data['order'][data.pop < data.ma] = 1 

當我運行ma大於po後,順序值沒有變化。正如我在表中看到的,當我運行pop比ma代碼更大時,所有內容都會變成-1。在本質上,我認爲它必須是數據類型的錯誤,所以我確保兩者都是相同的,並將它們都轉換爲float32。即使在那之後它也沒有運行。

>>> data.dtypes 
stock float64 
pop  float32 
ma  float32 
order  int64 
dtype: object 

任何建議可能會出錯將不勝感激。

回答

2

首先,您正在運行鏈接索引 - 以交互方式運行,您將看到警告,另請參閱文檔here

其次,pop是一個DataFrame方法,所以data.pop實際上是返回該方法,而不是列名。訪問該列的安全方式是data['pop']

所以,你可以寫這樣的:

data.loc[data['pop'] > data['ma'], 'order'] = -1 

data.loc[data['pop'] < data['ma'], 'order'] = 1 

data 

       stock pop ma order 
Date         
2016-01-04 325.316 82.0 NaN  -1 
2016-01-11 320.036 83.0 NaN  -1 
2016-01-18 299.169 79.0 82.5  1 
2016-01-25 296.579 84.0 81.0  -1 
2016-02-01 295.334 82.0 81.5  -1 
2016-02-08 309.777 81.0 83.0  1 
2016-02-15 317.397 75.0 81.5  1 
2016-02-22 328.005 80.0 78.0  -1 
2016-02-29 315.504 81.0 77.5  -1 
2016-03-07 328.802 81.0 80.5  -1 
+0

我看到所以基本上我寫的代碼進行比較的方法,因此輸出是相同的每次。理解並非常感謝! – Anti21