Pandas处理int/str混合值列时长整数科学计数法显示问题
更新
尝试过相关方案后,仍然只能得到字符串形式的5.02401E+16,无法拿到完整数值50240100011400000。
初始问题
需要处理Pandas中列名为REFERENCE NO的数据列,该列为混合类型,同时存在整数、字符串、非整数值,当前长整数会自动显示为科学计数法形式的5.02401E+16,需要正确显示完整长整数值50240100011400000。
解决方案
问题来自两个核心原因:一是Pandas默认对大长度数值自动启用科学计数法显示规则,二是混合类型列会被识别为object类型,直接强转整列要么报错要么丢失精度。按以下步骤处理即可:
- 先关闭Pandas全局科学计数法显示配置
import pandas as pd # 浮点数显示不带小数位,不触发科学计数法 pd.set_option('display.float_format', lambda x: f'{x:.0f}')
- 逐元素转换
REFERENCE NO列的值,兼容混合类型,原有非数值内容不会被篡改
def format_ref_no(val): # 处理科学计数法格式的字符串 if isinstance(val, str) and 'E+' in val.upper(): try: return str(int(float(val))) except ValueError: return val # 处理数值类型的大整数 if isinstance(val, (int, float)) and not pd.isna(val): return str(int(val)) # 其余非数值、空值原样返回 return val df['REFERENCE NO'] = df['REFERENCE NO'].apply(format_ref_no)
- 如果导出Excel时仍出现科学计数法,导出时将对应列设置为文本格式即可
# 示例:假设REFERENCE NO是第3列(列号从1开始计数,按实际位置调整列标) with pd.ExcelWriter('result.xlsx', engine='openpyxl') as writer: df.to_excel(writer, index=False) ws = writer.sheets['Sheet1'] ws.column_dimensions['C'].number_format = '@'
注意:不要直接对整列使用
astype(int)或者pd.to_numeric(),列内存在非数值内容时这两个方法会直接报错,逐元素apply的方式可以完美兼容混合类型场景。
内容的提问来源于stack exchange,提问作者4 Leave Cover
相关产品推荐
相关产品推荐

