【问题标题】:Converting pandas column to string w/o scientific notation将 pandas 列转换为没有科学记数法的字符串
【发布时间】:2015-10-30 04:36:26
【问题描述】:

很多问题都解决了这个问题,但似乎没有一个解决方案完全符合我的需要。

我有一个数据框,其中包含两列数字,每列 10-20 位数字。这些实际上是 ID #s,我想将它们连接起来。看起来最好首先将值转换为字符串。

但是,当用.astype(str) 转换时,pandas 会保留科学计数法,它不会飞。

我尝试过的事情:

试过:dtype arg ('str') 或转换器(使用str())在read_csv()

结果:df.dtypes 仍然列出“对象”,并且值仍然显示在 sci 中。符号

试过了:pd.set_option('display.float_format', lambda x: '%.0f' % x)

结果:在df.head() 中显示良好,但在使用 + 运算符强制转换为字符串和连接时恢复为科学计数法

尝试过:强制转换为 int、str 或 str(int(x))。
结果:当我用int() 强制一个值时,int 有效,但当我使用astype(int) 时无效。使用 .apply() 和 int() 会引发“invalid literal long() with base 10”错误。

这感觉应该很简单,急于弄清楚我错过了什么。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您尝试设置显示格式。您可以将浮点数格式化为数据框中的字符串。

    import numpy as np
    import pandas as pd
    
    import numpy as np
    

    将熊猫导入为 pd

    df=pd.DataFrame(data={'a':np.random.randint(low=1,high=100,size=10)*1e20,'b':np.random.randint(low=1,high=100,size=10)*1e20})
    df.apply(lambda x: '{0:20.0f}|{1:20.0f}'.format(x.a,x.b),axis=1)
    
    
    
    Out[34]:
    0    9699999999999998951424|4600000000000000000000
    1     300000000000000000000|2800000000000000000000
    2    9400000000000000000000|9000000000000000000000
    3    2100000000000000000000|4500000000000000000000
    4    5900000000000000000000|4800000000000000000000
    5    7700000000000000000000|6200000000000000000000
    6    1600000000000000000000|8000000000000000000000
    7      100000000000000000000|400000000000000000000
    8    9699999999999998951424|8000000000000000000000
    9    4500000000000000000000|3500000000000000000000
    

    【讨论】:

    • 谢谢,这是一个不错且简单的解决方案。不过,仍在努力解决此问题,因为尝试实施此解决方案实际上揭示了我的数据中的一个错误,即 pandas 将某些值解析为浮点数。一旦我解决了这个问题,我认为这会成功。
    • 是的,忘记点击“正确答案”。再次感谢!为了后代:我只需要编写一个 apply() 函数,将每一行转换为 float64,然后使用您的技术连接。有些是不可转换的,因此该函数丢弃了这些行。
    猜你喜欢
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2017-12-24
    • 2014-12-23
    相关资源
    最近更新 更多