You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免DataFrame将字母数字ID误判为科学计数法显示inf

解决Pandas解析字母数字ID为科学计数法导致inf的问题

问题根源

核心问题在于:输入34E94591这类未加引号的内容时,Python会先将其解析为科学计数法表示的数值(即34 × 10^94591),这个数值远超出浮点数最大范围,直接变成inf,后续转字符串也无法恢复原始ID。而773E893E88因包含两个E,Python无法解析为数值,所以能保留字符串类型;纯数字ID则可正常解析为整数再转字符串。

解决方案

1. 手动构造DataFrame的场景

必须把所有ID以字符串字面量形式传入(加双/单引号),不让Python自动解析为数值:

import pandas as pd
x = pd.DataFrame({'Id': ["34E94591", "122322", "773E893E88"]}, dtype=str)
print(x.head())

执行后输出完全符合期望:

Id
034E94591
1122322
2773E893E88

2. 使用Pygsheet读取Google Sheets的场景

要避免pandas自动推断类型,强制以字符串格式读取Id列:

  • 方法一:先获取纯字符串格式的单元格值,再转DataFrame
import pygsheet
import pandas as pd

# 授权并打开目标表格
gc = pygsheet.authorize()
sheet = gc.open("你的表格名称").sheet1

# 以字符串形式获取所有单元格值
values = sheet.get_all_values(returnas='matrix')
# 转换为DataFrame,指定所有列类型为字符串
df = pd.DataFrame(values[1:], columns=values[0], dtype=str)
  • 方法二:直接用get_as_df()指定列类型
    若你的pygsheet版本支持传递dtype参数,可直接强制Id列为字符串:
df = sheet.get_as_df(dtype={'Id': str})

也可以直接让整个DataFrame以字符串类型读取:

df = sheet.get_as_df(dtype=str)

验证效果

执行上述代码后,Id列的所有字母数字ID都会保留原始格式,不会再出现inf的错误。

内容的提问来源于stack exchange,提问作者TFan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 01:43:27