要列出的 Pandas 数据框系列 - 抑制浮点科学记数法
Posted
技术标签:
【中文标题】要列出的 Pandas 数据框系列 - 抑制浮点科学记数法【英文标题】:Pandas Dataframe Series To List - Suppress Float Scientific Notation 【发布时间】:2014-08-11 19:22:12 【问题描述】:我有一个带有浮点列的 Pandas DataFrame,我将其转换为列表,然后转换为字符串,然后写入文本文件以供其他用途。
例如:
df=pd.DataFrame([[0.0068149439999999999, 0.90550613999999996], [7.5699999999999997e-05, 0.48159182100000003],
[0.009679478, 0.50158892700000002], [0.020792602, 0.56266469899999993]], columns=['ColumnA', 'ColumnB'])
TextToWrite='ColumnA = (' + str(df['ColumnA'].tolist())[1:-1] + ')'
f=open('myfile.txt', 'w')
f.write(TextToWrite)
但是,我需要转换后的浮点数不采用科学计数法(在本例中为 7.5699999999999997e-05)。抑制这些浮点数的科学记数法的最佳方法是什么?在 Pandas DataFrame 中预先或在系列已经转换为列表之后这样做更有意义?
我查看了“float_format”参数,这可以通过“to_csv”和“to_string”命令完成,但我不确定如何做到这一点,并且仍然以相同的格式将字符串写入文本文件我在上面做。
【问题讨论】:
【参考方案1】:(刚刚意识到我的答案迟到了,但如果您想更好地控制输出格式,我会留下一个替代答案)只需将 TextToWrite 行替换为:
TextToWrite = 'ColumnA = ' + ' %12.7f'*4 % tuple( df['ColumnA'].tolist() )
得到这个:
ColumnA = 0.0068149 0.0000757 0.0096795 0.0207926
请注意,您需要选择格式以提供足够的精度,因为即使结果为 0.0,这也会强制十进制格式超过指数格式。例如,如果你使用 %12.1,你只会得到一堆零。
顺便说一句,我相信(通过测试)chrisaycock 的 %f 相当于 %8.6f 在这里应该没问题,但是如果您的数据中有其他较小的值(例如,0.00000009),那么您可能还不够%f 的精度。
【讨论】:
谢谢,这很有帮助【参考方案2】:通常你可以使用astype(str)
,它更适合四舍五入。但由于您的数字太小,您必须通过'%f'
明确禁止科学记数法。
def to_str(x): return '%f' % x
', '.join(df.ColumnA.apply(to_str).values)
【讨论】:
这看起来是正确的方法,但是使用 astype() 将列转换为字符串,然后加入这些值仍然会给我留下科学计数法的数字。 @AJG519 请编辑您的问题以显示示例。包含一个 DataFrame,我们可以自己使用它来复制您的问题。 很抱歉。刚刚编辑了问题并包含了我的数据集示例以上是关于要列出的 Pandas 数据框系列 - 抑制浮点科学记数法的主要内容,如果未能解决你的问题,请参考以下文章
Numpy isnan() 在浮点数组上失败(来自 pandas 数据框应用)