使用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
相关产品推荐
相关产品推荐

