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

拼接Pandas两列时如何避免出现科学计数法

解决Pandas大整数列拼接出现科学计数法的问题

我明白你遇到的困扰了——明明已经把两列转成字符串再拼接,结果却出现了科学计数法,这确实挺让人意外的。问题的根源在于:当你对**超大整数类型(int64)的列直接使用astype(str)**时,Pandas可能会自动将其转换为科学计数法格式的字符串,而非完整的十进制数字字符串。

问题重现

先还原你的场景:

import pandas as pd

# 模拟你的DataFrame
dfoffers = pd.DataFrame({
    'FVID': [1000373197012497808],
    'vnum': [2]
})

print(dfoffers.dtypes)
# 输出:
# FVID    int64
# vnum    int64
# dtype: object

如果直接执行dfoffers['FVID'].astype(str),你大概率会得到类似'1.0003731970124978e+17'的结果,这就是拼接后出现科学计数法的核心原因。

解决方案:确保大整数转字符串时保留完整格式

我们需要用更精确的方式将大整数列转换为字符串,避免科学计数法。这里提供两种可靠的方法:

方法1:使用apply配合整数格式化

通过lambda函数和f-string的整数格式化,强制将大整数转换为完整的十进制字符串:

# 转换FVID为完整整数格式的字符串
dfoffers['FVID_str'] = dfoffers['FVID'].apply(lambda x: f"{x:d}")
# vnum数值较小,直接转字符串即可
dfoffers['vnum_str'] = dfoffers['vnum'].astype(str)
# 拼接生成combo列
dfoffers['combo'] = dfoffers['FVID_str'] + dfoffers['vnum_str']

方法2:使用numpy.format_float_positional(适用于数值被隐式转为float的情况)

如果你的大整数列因某些原因被隐式转换为float类型,这个方法可以强制取消科学计数法:

import numpy as np

dfoffers['FVID_str'] = dfoffers['FVID'].apply(lambda x: np.format_float_positional(x, trim='-'))
dfoffers['vnum_str'] = dfoffers['vnum'].astype(str)
dfoffers['combo'] = dfoffers['FVID_str'] + dfoffers['vnum_str']

验证结果

执行上述方法后,你会得到预期的拼接结果:

print(dfoffers['combo'].head(1))
# 输出:0    10003731970124978082
# Name: combo, dtype: object

另外,提个小细节:你代码里的df.FVID应该改为dfoffers.FVID,避免因变量名不一致导致的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:23:05