【问题标题】:How to remove decimal points in pandas如何删除熊猫中的小数点
【发布时间】:2021-08-07 23:00:31
【问题描述】:

我有一个 pandas 数据框 df,它看起来像这样:

Cut-off             <=35   >35                   
Calcium              0.0   1.0
Copper               1.0   0.0
Helium               0.0   8.0
Hydrogen             0.0   1.0

如何去掉小数点,让数据框看起来像这样:

Cut-off             <= 35  > 35                   
Calcium              0     1
Copper               1     0
Helium               0     8
Hydrogen             0     1

我试过df.round(0) 没有成功。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你有几个选择...

    1) 将所有内容都转换为整数。

    df.astype(int)
              <=35  >35
    Cut-off            
    Calcium      0    1
    Copper       1    0
    Helium       0    8
    Hydrogen     0    1
    

    2) 使用round:

    >>> df.round()
              <=35  >35
    Cut-off            
    Calcium      0    1
    Copper       1    0
    Helium       0    8
    Hydrogen     0    1
    

    但并不总是很好......

    >>> (df - .2).round()
              <=35  >35
    Cut-off            
    Calcium     -0    1
    Copper       1   -0
    Helium      -0    8
    Hydrogen    -0    1
    

    3) 在 Pandas 中更改显示精度选项。

    pd.set_option('precision', 0)
    
    >>> df
              <=35  >35
    Cut-off            
    Calcium      0    1
    Copper       1    0
    Helium       0    8
    Hydrogen     0    1 
    

    【讨论】:

    • @alexander 如何将这些方法中的任何一种应用于一个特定的列?可不可能是? df["&gt;35"].round()
    • @3kstc 是的。可能最好将结果转换为整数df["&gt;35"].round().astype(int)
    • 对于您的最后评论。如果您仍然要使用astype(int),为什么还需要round()?为什么round() 给我一个小数位,即使我把它留为空白或输入零?谢谢
    • astype(int) 截断该值,因此pd.Series([.9]).astype(int) 导致值为零。如果你先四舍五入,那就是一个。
    【解决方案2】:

    从 pandas 0.17.1 开始,您可以通过 modifying the style of the particular data frame 设置显示的数值精度,而不是设置全局选项:

    import pandas as pd
    import numpy as np
    
    np.random.seed(24)
    df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
    df 
    

    df.style.set_precision(2)
    

    也可以应用特定于列的样式

    df.style.format({
        'A': '{:,.1f}'.format,
        'B': '{:,.3f}'.format,
    })
    

    【讨论】:

      【解决方案3】:

      如果您根本不需要小数,也可以使用此代码:

      df['col'] = df['col'].astype(str).apply(lambda x: x.replace('.0',''))
      

      【讨论】:

        猜你喜欢
        • 2019-08-12
        • 1970-01-01
        • 1970-01-01
        • 2020-12-19
        • 2019-01-21
        • 2020-10-03
        • 1970-01-01
        • 1970-01-01
        • 2021-08-31
        相关资源
        最近更新 更多