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

使用Pandas to_csv导出CSV时如何抑制大数的科学计数法?

解决CSV写入时大数变成指数格式的问题

嗨,这个坑我之前处理用户手机号、账号数据的时候也踩过!科学计数法不仅看着闹心,后续导入还容易丢精度,给你几个直接好用的解决办法:

方法1:读取SQL时直接指定列类型为字符串

从数据库读取数据时,如果提前知道哪些列是需要保留原样的大数(比如账号、手机号),直接把这些列指定为字符串类型,从根源避免被识别成数值型。

修改你读取SQL的代码:

# 替换成你实际需要保留的列名
str_columns = ['account_id', 'phone_num']
# 读取时指定dtype参数
itr = pd.read_sql_query(sql, connection, chunksize=chunksize, dtype={col: str for col in str_columns})

这样每个chunk读进来的目标列都是字符串,后续写入CSV时就不会转换成科学计数法了,还能保留前导0这类特殊格式。

方法2:读取后转换列类型为字符串

如果已经读入数据才发现问题,可以在拼接Dask DataFrame之前,把目标列转成字符串类型:

修改你的循环代码:

str_columns = ['account_id', 'phone_num']  # 替换为实际列名
for i in itr:
    # 将指定列转换为字符串
    i[str_columns] = i[str_columns].astype(str)
    if count == 0:
        df.append(dd.from_pandas(i, chunksize=chunksize))
    else:
        i.index += count * chunksize
        df.append(dd.from_pandas(i, chunksize=chunksize))
    count += 1

之后再执行dfs = dd.concat(df)和写入操作就没问题了。

方法3:写入CSV时指定格式化规则(适合数值型列)

如果因为某些原因不能转成字符串,也可以在写入时强制格式化数值为普通整数格式:

# 假设目标列是数值型,用lambda函数格式化
dfs.to_csv(csv_file, 
           index=False,
           formatters={'account_id': lambda x: f'{int(x)}', 
                       'phone_num': lambda x: f'{int(x)}'})

不过这个方法只适合没有小数的整数列,而且如果有前导0会丢失,所以优先推荐前两种方法。

注意事项

  • 确认目标列不需要进行数值计算(比如账号、手机号本来就是标识类数据),转成字符串完全不影响后续使用。
  • 如果是Dask DataFrame,astype方法和Pandas用法一致,指定列名和类型即可。

内容的提问来源于stack exchange,提问作者Hemanth S. Vaddi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:36:38