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

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)


你可能感兴趣的:(pandas,excel)