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)


  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pandas 中,日期间类型的数据是以 Unix 间戳(Unix timestamp)的形式存储的。Unix 间戳是从 1970 年 1 月 1 日 00:00:00 UTC 开始的秒数,它是一个整数(或浮点数),可以精确表示从某个间点到现在的间差。因此,当你使用 Pandas 的 `to_datetime()` 函数将文本数据转换为日期间类型Pandas 会将这个日期间解释为 Unix 间戳,然后将其转换为日期间类型。 在你的例子中,文本数据 "20221220" 被解释为 Unix 间戳 1639958400,这个间戳表示从 1970 年 1 月 1 日 00:00:00 UTC 开始到 2022 年 12 月 20 日 00:00:00 UTC 的间差。因此,当你使用 Pandas 将其转换为日期间类型,得到的结果是 "1970-01-01 00:00:00.020221220",其中 ".020221220" 表示从 Unix 间戳开始到指定间点的纳秒数。 如果你想要得到 "2022-12-20 00:00:00" 这样的日期间格式,可以使用 Pandas 的 `strftime()` 函数将日期间格式化为指定的字符串格式。例如: ```python import pandas as pd # 创建一个包含文本数据的 DataFrame df = pd.DataFrame({'date': ['20221220']}) # 将文本数据转换为日期间类型 df['date'] = pd.to_datetime(df['date'], format='%Y%m%d') # 将日期间格式化为指定的字符串格式 df['date_str'] = df['date'].dt.strftime('%Y-%m-%d %H:%M:%S') # 输出结果 print(df['date_str']) ``` 这样就可以得到一个格式为 "2022-12-20 00:00:00" 的字符串了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值