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

将CSV指定列科学计数法转为普通数字并导出新CSV(大文件)

问题

现有一份系统导出的3列CSV文件,第一列以科学计数法显示数字。需仅将该列转换为普通数字后导出至新CSV文件,因文件含数千行,无法使用Excel处理。曾尝试float、round相关方法,但未找到适配大文件的方案。

示例输入输出

输入(file1.csv)

ID, Phone, Email
1.23E+15, 123-456-7890, johnsmith@test.com

输出(file2.csv)

ID, Phone, Email
1234680000000000, 123-456-7890, johnsmith@test.com

尝试的错误代码

import pandas
import numpy as np

pandas.read_csv('file1.csv', dtype=np.float64)
df = df.apply(pd.to_numeric, errors='coerce')
df.round(0)
df.to_csv(float_format='file2.csv')

错误原因分析

  • 第一行pandas.read_csv未赋值给df,导致后续代码中df未定义
  • df.apply(pd.to_numeric)属于冗余操作,无需全表转换数值类型
  • df.round(0)未重新赋值,Pandas方法默认返回新对象,不会修改原DataFrame
  • df.to_csv参数错误:float_format是指定浮点数格式的参数,文件名应作为第一个位置参数传入

解决方案

方法1:Pandas 常规处理(适合多数大文件场景)

修正代码逻辑,精准处理目标列,避免不必要的类型转换:

import pandas as pd

# 读取CSV,指定各列类型,防止Phone等列被误转
df = pd.read_csv('file1.csv', dtype={'ID': float, 'Phone': str, 'Email': str})
# 将ID列转为整数,消除科学计数法
df['ID'] = df['ID'].astype(int)
# 导出CSV,不写入索引列
df.to_csv('file2.csv', index=False)

如果文件过大,可采用分块读取减少内存占用:

import pandas as pd

chunk_size = 1000  # 每次处理1000行
with pd.read_csv('file1.csv', chunksize=chunk_size, dtype={'ID': float, 'Phone': str, 'Email': str}) as reader:
    for idx, chunk in enumerate(reader):
        chunk['ID'] = chunk['ID'].astype(int)
        # 第一块写入表头,后续块追加内容
        chunk.to_csv('file2.csv', index=False, mode='w' if idx == 0 else 'a', header=idx == 0)

方法2:CSV模块逐行处理(极致内存友好,超大型文件首选)

用Python内置csv模块逐行读写,无需加载全表到内存:

import csv

with open('file1.csv', 'r', newline='') as infile, open('file2.csv', 'w', newline='') as outfile:
    reader = csv.DictReader(infile)
    writer = csv.DictWriter(outfile, fieldnames=reader.fieldnames)
    writer.writeheader()
    
    for row in reader:
        # 科学计数法字符串转整数后转回字符串,确保输出为普通数字格式
        row['ID'] = str(int(float(row['ID'])))
        writer.writerow(row)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:55:16