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

Pandas读取CSV出现无法将字符串转换为浮点错误,如何跳过对应错误行

问题解决方案

你遇到的ValueError: could not convert string to float: 'ORCH'是字段内容不符合指定的数值类型导致的转换错误,error_bad_lines(该参数在pandas 2.0+版本已废弃,替换为on_bad_lines)仅用于跳过列数和表头不匹配的行,无法处理这类内容转换错误,可通过以下两种方案解决:

方案1:读入时通过自定义转换函数处理

自定义类型转换函数,遇到无法转换为对应类型的内容直接返回空值,读取完成后删除携带空值的异常行即可:

import pandas as pd
import numpy as np

# 安全浮点转换函数,转换失败返回空值
def safe_float(x):
    try:
        return float(x)
    except ValueError:
        return np.nan

# 安全整型转换函数,转换失败返回空值
def safe_int(x):
    try:
        return int(x)
    except ValueError:
        return np.nan

csv2020 = pd.read_csv(
    'filename.txt',
    sep="\t",
    usecols=['field1', 'field2', 'field3', 'field4'],
    converters={
        'field1': safe_int,
        'field2': safe_float,
        'field3': safe_float,
        'field4': safe_float
    }
).dropna(axis=0, how='any') # 删除所有存在转换失败的行

方案2:先读为字符串再批量转换(超大数据集性能更优)

避免逐行调用自定义函数的性能损耗,先统一读取为字符串格式,再批量做类型转换:

import pandas as pd

# 先全部读取为字符串格式,避免读入阶段报错
csv2020 = pd.read_csv(
    'filename.txt',
    sep="\t",
    usecols=['field1', 'field2', 'field3', 'field4'],
    dtype=str,
    on_bad_lines='skip' # 同时跳过列数不匹配的异常行
)
# 转换整型字段,转换失败自动设为空值
csv2020['field1'] = pd.to_numeric(csv2020['field1'], errors='coerce').astype('Int64')
# 批量转换浮点型字段
for col in ['field2', 'field3', 'field4']:
    csv2020[col] = pd.to_numeric(csv2020[col], errors='coerce')
# 删除异常行
csv2020 = csv2020.dropna(axis=0, how='any')

补充优化建议

  • 处理1亿行量级的数据集时,可添加chunksize参数分块读取,例如设置chunksize=100000每次读取10万行处理后再合并结果,避免内存溢出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:21:02