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

使用Pandas读取SharePoint中CSV文件时的科学计数法问题

解决Pandas读取CSV时长数字被转为科学计数法的问题

问题分析

核心问题在于:即使指定dtype={'Application Number':str},Pandas仍将长数字字符串读取为科学计数法格式,大概率是因为CSV文件本身存储的内容已经是科学计数法(比如Excel保存时自动转换),或者读取过程中编码/解析逻辑导致字符串被误识别为数值。

解决步骤

1. 先确认原始CSV内容

先把从SharePoint获取的内容保存到本地,检查"Application Number"列的实际存储格式:

with open('temp.csv', 'wb') as f:
    f.write(response.content)

打开temp.csv查看,如果单元格内容已经是6.02E+11,说明文件本身就是科学计数法格式,需要转成完整字符串;如果是602013000000,则是读取参数设置问题。

2. 处理科学计数法格式的内容

如果CSV里已经是科学计数法,用converters参数自定义转换函数,将科学计数法转为完整数字字符串:

import pandas as pd
import io

def sci_to_full_str(value):
    try:
        # 针对整数型科学计数法,转成整数再转字符串
        return str(int(float(value)))
    except ValueError:
        # 非数值内容直接返回(比如空值、普通字符串)
        return value

response = File.open_binary(ctx, "/".join([folder_relative_url, newest]))
df = pd.read_csv(io.BytesIO(response.content), converters={'Application Number': sci_to_full_str})

如果数据可能包含小数,改用更精确的Decimal转换:

def sci_to_full_str(value):
    try:
        from decimal import Decimal
        return str(Decimal(value))
    except ValueError:
        return value

3. 优化读取参数(针对原始内容是完整字符串的情况)

如果原始CSV里是完整的长数字字符串,但Pandas仍识别错误,尝试以下调整:

  • 指定正确编码:SharePoint文件可能用utf-8或gbk编码,显式声明:
    df = pd.read_csv(io.BytesIO(response.content), dtype={'Application Number': str}, encoding='utf-8')
    
  • 正确使用StringIO:避免直接转str(response.text),先解码正确编码:
    csv_content = response.content.decode('utf-8')  # 替换为文件实际编码
    df = pd.read_csv(io.StringIO(csv_content), dtype={'Application Number': str})
    
  • 关闭默认空值识别:防止空值干扰类型解析:
    df = pd.read_csv(io.BytesIO(response.content), dtype={'Application Number': str}, keep_default_na=False)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:54:15