围绕熊猫的一列

k3i*_*3it 32 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
Run Code Online (Sandbox Code Playgroud)

df.value1.apply(np.round)给出

0    1
1    2
2    0
3    3
4    5
5    5
Run Code Online (Sandbox Code Playgroud)

使数据看起来像这样的正确方法是什么:

  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
Run Code Online (Sandbox Code Playgroud)

Lyn*_*ite 51

你很近.你应用了圆形给出的一系列值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
Run Code Online (Sandbox Code Playgroud)

  • @LyndonWhite 可以使用 `df["value1"].round()` 吗?还有_round up_ 或_round down_ 函数吗?如果列名中有空格怎么办?即`value 1` - 我假设`df.value 1.round()` 会失败? (2认同)
  • 看来您在那里有3个问题。使用询问按钮3次。 (2认同)

Rei*_*mar 30

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

decimals = 2    
df['column'] = df['column'].apply(lambda x: round(x, decimals))
Run Code Online (Sandbox Code Playgroud)

  • df.column_name.round()似乎适用于输出格式.应用lambda实际上改变了底层存储值. (2认同)
  • 这给出了SettingWithCopyWarning (2认同)

小智 19

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

df = df.round({'value1': 0})
Run Code Online (Sandbox Code Playgroud)

未包含的任何列将保持原样。


小智 13

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

sleepstudy['Reaction'] = sleepstudy['Reaction'].round(1)
Run Code Online (Sandbox Code Playgroud)


小智 6

无需使用 lambda 或创建函数。它很简单。请参阅下面的示例

df['decimal_place_2'] = df['decimal_place_2'].round(2)
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个问题的答案需要更新......Tx (3认同)

kaw*_*vin 5

如果您正在进行机器学习并使用 tensorflow,则许多浮点数是“float32”,而不是“float64”,并且此线程中提到的任何方法都不可能有效。您必须先转换为 float64。

x.astype('float')
Run Code Online (Sandbox Code Playgroud)

在回合之前(...)。


小智 5

saldo_acred['cumsum_prc_saldo'].astype('float').round(2)
Run Code Online (Sandbox Code Playgroud)