2014-10-01 32 views
15

有沒有辦法在熊貓中舍入單個列而不會影響數據幀的其餘部分?繞過熊貓的單個列

df: 
     item value1 value2 
    0 a 1.12  1.3 
    1 a 1.50  2.5 
    2 a 0.10  0.0 
    3 b 3.30 -1.0 
    4 b 4.80 -1.0 

df.value1.apply(np.round) 給

0 1 
1 2 
2 0 
3 3 
4 5 
5 5 

什麼是正確的方法,使數據看起來像這樣:

item value1 value2 
0 a  1  1.3 
1 a  2  2.5 
2 a  0  0.0 
3 b  3 -1.0 
4 b  5 -1.0 
5 c  5  5.0 

回答

22

你非常接近。 您應用了該輪的df.value1給出的一系列值。 返回類型因此是一個系列。 您需要在一系列分配回數據幀(或具有相同指數的另一個數據幀)

也有一個Series.round方法,基本上是Series.apply(np.round)

In[2]: 
    df.value1 = df.value1.round() 
    print df 

Out[2]: 
    item value1 value2 
    0 a  1  1.3 
    1 a  2  2.5 
    2 a  0  0.0 
    3 b  3 -1.0 
    4 b  5 -1.0 
+1

謝謝。沒有感覺非常明亮,因此錯過了這個:) – k3it 2014-10-01 04:15:02

+0

熊貓不會(對我來說至少)自然來臨。我確信我在上週左右閱讀了另一個SO回答之後,如何做到這一點。但我再也找不到它標記爲重複,因此它可能是一個稍有不同的問題。 – 2014-10-01 14:57:00

10

手短出於某種原因,輪()方法不起作用,如果你有浮點數有許多小數位,但會這樣。

desred_decimals = 2  
df['column'] = df['column'].apply(lambda x: round(x,desred_decimals)) 
+2

df.column_name.round()似乎適用於輸出格式。 lambda的應用實際上改變了底層存儲值。 – 2018-02-22 04:50:39

+0

@StephanDoliov準確地說,精確問題困擾了我很長一段時間。 'round()'只能設置顯示精度而非存儲值。 – seizetheday 2018-03-02 02:45:16