2024-01-19:Pandas数据保存到excel时如何批量避免科学记数法,并且保存精度(原创)

本文介绍了在将Python中的int型数据写入Excel时遇到的长度限制和精度问题,提出将数据转换为str类型、使用float_format设置以及处理包含文字和数字的场景,以确保数据正确保存。
摘要由CSDN通过智能技术生成

Python的int型写入Exce时会有两种潜在问题:
1.数字长度超过12个会自动转变成科学计数法(官方文档说是12个/实际为8个);

2.数字长度超过15个会失去数字精度,即15位以后的数字位全部变为零。

这里直接给出两个demo供大家参考

(1)如果你的数据很长,但是显性出现在代码中的话就用这招,直接修改数据类型为str

import pandas as pd

# 创建DataFrame
data = {'数据': [4419000205979153408, 4419000205974183424, 4419000205921873408, 4419000205920983040,
                   4419000205920865792, 4419000205920865792, 4419000205920865792, 4419000205920864768,
                   4419000205920864768, 4419000205920861696, 4419000205920861696, 4419000205920861696,
                   4419000205920861696, 4419000205920861696, 4419000205920860672, 4419000205920860672,
                   4419000205920860672, 4419000205920858624, 4419000205920858624, 4419000205920857600]}

df = pd.DataFrame(data).astype(str)

# 保存DataFrame为Excel文件
output_excel_path = 'output.xlsx'
df.to_excel(output_excel_path, index=False, header=False, float_format='%.0f')

如果你是读取了其他文件后进行处理的,修改data使用,因为即使将DataFrame 中的列类型转换为字符串(astype(str)),但float_format='%.0f'这个设置仍然会被应用到数据上,导致数值仍以浮点数形式保存。

为了解决这个问题,可以在调用to_excel之前将数据中的浮点数格式化成字符串。这可以通过使用applymap函数来完成:

import pandas as pd

# 创建DataFrame
data = {'数据':  data_1['标签1']}

df = pd.DataFrame(data).astype(str)

# 格式化DataFrame中的浮点数为字符串
df = df.applymap(lambda x: '{:.0f}'.format(float(x)) if '.' in x else x)

# 保存DataFrame为Excel文件
output_excel_path = 'output.xlsx'
df.to_excel(output_excel_path, index=False, header=False)

2024.01.22更新:如果数据里面含有文字和数字,则添加一个判断:

import pandas as pd
 
# 创建DataFrame
data = {'数据':  data_1['标签1']}
 
df = pd.DataFrame(data).astype(str)
 
# 格式化DataFrame中的浮点数为字符串
def format_float(x):
     try:
         return '{:.0f}'.format(float(x))
     except ValueError:
         return x

df = df.applymap(format_float)

# 保存DataFrame为Excel文件
output_excel_path = 'output.xlsx'
df.to_excel(output_excel_path, index=False, header=False)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值