【问题标题】:How to add trailing zeroes to floating point value and export to excel as float(number)?如何将尾随零添加到浮点值并导出为 excel 作为浮点(数字)?
【发布时间】:2021-04-02 04:12:53
【问题描述】:

我从 excel 中读取了一个文件并读取为 pandas 数据框。

我必须对浮动数据类型值进行一些转换。

我想添加尾随零或更改值的小数位。 例如: 25 至 25.0000 23.3 至 23.3000 24.55 至 24.5500

我尝试将值更改为 str,然后添加零。 但是在将其导出回 excel 时,我得到了我想要的字符串(文本)。

我也尝试过十进制库,但在导出时遇到了同样的问题。

请帮助大家。 我想将文件导出到 excel,所以需要相应地进行更改。

谢谢

【问题讨论】:

  • 这是你必须在excel单元格的格式中调整的东西。对于 Excel 25 与 25.0000 相同。更改单元格格式将修改其显示方式。
  • @divingTobi 嘿,谢谢您的解决方案。实际上我有办法在excel中包含许多包含浮动值的列。虽然它在 excel、25 和 25.0000 中相同,但是手动更改格式很烦人,并且正在考虑通过 python 将其自动化。你能建议任何方法或文章来做到这一点。谢谢
  • 请看下面我的回答,我基本上是从 XlsxWriter 文档中复制了代码。

标签: python excel pandas dataframe numpy


【解决方案1】:

你可以试试df['column']=df['column'].astype(float)。这将改变一个浮点数。

如果您返回字符串,Excel 将读取为文本。

【讨论】:

  • 是的,但我所做的更改是相反的。
  • 你也可以输入 decimal=',' 或 '.' (取决于您所在的地区)当您执行 df.to_excel 时。也许这也有帮助。
【解决方案2】:
import pandas as pd

s = pd.Series([25, 23.3, 24.55])
s.map('{:.4f}'.format)
Out[1]: 
0    25.0000
1    23.3000
2    24.5500
dtype: object

【讨论】:

  • 我试过这个,在导出到 excel 时它给出的是 str 或 text 而不是浮点值
  • 这是excel中的默认设置,不是数据中的。 Microsoft Excel 会自动删除前导零和尾随零 after a decimal point
【解决方案3】:
import pandas as pd

data = {'col1': [25, 23.3, 24.55], 'col2': [17.3, 18.5, 17.27]}

df = pd.DataFrame(data)

to_csv 中的 float_format 参数允许您随意格式化浮点数据。

df.to_excel('output.xlsx', float_format='%.4f')

【讨论】:

  • 其实我想导出为ex​​cel,to_excel可以做同样的事情吗?
  • 是的,我已经更新了它以向您展示 Excel。
【解决方案4】:

查看XlsxWriter documentation 了解更多详情。基本上,您需要的代码如下:

import pandas as pd
import math

df = pd.DataFrame({'a': [i*0.1*math.pi for i in range(10)]})

print(df)

writer = pd.ExcelWriter("file.xlsx", engine='xlsxwriter')
df.to_excel(writer, sheet_name="Sheet1")
book = writer.book
sheet = writer.sheets['Sheet1']

format1 = book.add_format({'num_format': '#,####0.0000'})
cols = ['A', 'B', 'K', 'L']
for c in cols:
    sheet.set_column(f"{c}:{c}", 18, format1)

writer.save()

【讨论】:

  • 嘿,谢谢,即使我正在研究相同的解决方案。我遇到的问题是,我想写大约 40 列。所以在写sheet.set_column('B:B', 18, format1)这一行多行时,我试图循环遍历它。你能建议如何做到这一点吗??
  • 嗨@somya_chaturvedi1 - 我已经修改了代码以将格式应用于A、B、K和L列:在cols列表中列出要修改的列,然后循环那个清单。我使用 f 字符串创建 set_column 中使用的“A:A”、“B:B”等。
  • 非常感谢。这就是我一直在寻找的。很快就会试试这个。谢谢
  • 非常感谢@somya_chaturvedi1 - 您介意将答案标记为正确吗?
猜你喜欢
  • 2022-09-29
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多