2014-10-01 33 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