【问题标题】:Suppress Scientific Format in a Dataframe Column抑制数据框列中的科学格式
【发布时间】:2018-09-29 06:52:09
【问题描述】:

我有一个名为 accountnumber 的列,其值类似于 pandas 数据框中的 4.11889000e+11。我想压制科学计数法并将值转换为4118890000。我尝试了以下方法,但没有奏效。

df = pd.read_csv(data.csv)
pd.options.display.float_format = '{:,.3f}'.format

请推荐。

【问题讨论】:

    标签: python pandas dataframe scientific-notation


    【解决方案1】:

    您不需要千位分隔符“,”和帐号的 3 位小数。

    请改用以下内容。

    pd.options.display.float_format = '{:.0f}'.format
    

    【讨论】:

    • 是的,这行得通,当我打印 df.Accountnumber 时,它会显示转换后的值。但是,当我打印 df.Accountnumber.unique() 时,它仍然以指数格式显示所有值。
    • 在这种情况下,您需要按照@floydn 的建议更改帐号列的数据类型。
    • 你也可以改变打印格式,这个解决方案更好,因为原始数据类型仍然有效
    【解决方案2】:

    我假设帐号的指数符号必须来自数据文件。如果我创建一个包含完整帐号的小 csv,pandas 会将它们解释为整数。

         acct_num
    0  4118890000
    1  9876543210
    
    df['acct_num'].dtype
    Out[51]: dtype('int64')
    

    但是,如果 csv 中的帐号以指数表示法表示,那么 pandas 会将它们读取为浮点数。

           acct_num
    0  4.118890e+11
    1  9.876543e+11
    
    df['acct_num'].dtype
    Out[54]: dtype('float64')
    

    您有 2 个选项。首先,更正创建 csv 的过程,以便正确写出帐号。二是将acct_num列的数据类型改为整数。

    df['acct_num'] = df['acct_num'].astype('int64')
    
    df
    Out[66]: 
           acct_num
    0  411889000000
    1  987654321000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 2014-02-03
      • 2020-05-31
      • 2021-12-18
      相关资源
      最近更新 更多