拼接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
相关产品推荐
相关产品推荐

