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)