围绕熊猫的一列

时间:2014-10-01 03:11:42

标签: python pandas

有没有办法在pandas中对单个列进行舍入而不影响数据帧的其余部分?

 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

8 个答案:

答案 0 :(得分:48)

你非常接近。 您将该轮应用于df.value1给出的一系列值。 返回类型因此是系列。 您需要将该系列分配回数据框(或具有相同索引的其他数据框)。

此外,还有pandas.Series.round方法基本上是pandas.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 :(得分:21)

由于某种原因,如果你有一个带有许多小数位的浮点数,round()方法就不起作用了,但是这样做。

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

答案 2 :(得分:9)

像这样使用pandas.DataFrame.round()方法:

D-Din

所有未包括的列将保持不变。

答案 3 :(得分:5)

无需使用for循环。它可以直接应用于数据框的列

sleepstudy['Reaction'] = sleepstudy['Reaction'].round(1)

答案 4 :(得分:2)

无需使用 lambda 或创建函数。这是直接的。 看下面的例子

df['decimal_place_2'] = df['decimal_place_2'].round(2)

答案 5 :(得分:1)

如果您正在进行机器学习并使用tensorflow,则许多float都是'float32'而非'float64'的,并且该线程中提到的任何方法都可能不起作用。您首先必须先转换为float64。

x.astype('float')

在回合之前(...)。

答案 6 :(得分:0)

就我而言,我在单列中既有字符串值又有十进制值。

def round_2(x):
    try:
        return round(x,2)
    except:
        return x

df['cur_TMIN_IMD_WeekSum']=df['cur_TMIN_IMD_WeekSum'].apply(round_2)

答案 7 :(得分:-1)

简单的列表理解就可以解决问题

decimals = 2 
df['column'] = [round(x, decimals) for x in df['column']]