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

Pandas read_csv如何处理整数列含字符串引发的数据类型解析错误行

Pandas read_csv如何处理整数列含字符串引发的数据类型解析错误行

嗨,我完全懂你的困扰——on_bad_lines='skip/warn'确实只负责处理解析层面的问题(比如列数不匹配、分隔符异常这类),碰到整数列里混了字符串这种数据类型不匹配的情况,它就完全不管用了。针对你给出的CSV和需求,我给你几个实用的解决方案:

方案一:用converters自定义转换逻辑,灵活处理错误值

你可以给需要转换的列指定自定义函数,遇到无法转成整数的情况时,要么返回空值(比如pd.NA),要么标记成特定值,后续再处理。

比如针对你的id和age列,写个安全转换整数的函数:

import pandas as pd

def safe_to_int(value):
    try:
        return int(value.strip())  # 先去掉可能的引号或空格
    except (ValueError, TypeError):
        return pd.NA  # 转失败就返回空值

# 这里只给不需要自定义转换的列指定dtype,自定义的放converters里
schema = {'name': 'str'}
df = pd.read_csv('a.csv', dtype=schema, converters={'id': safe_to_int, 'age': safe_to_int}, engine='python')

# 之后你可以选择删掉有错误值的行
df_clean = df.dropna(subset=['id', 'age'])
# 或者把空值填充成默认值,再转成int类型
df['id'] = df['id'].fillna(0).astype('int64')

方案二:先宽松读入,再批量转换并过滤错误行

如果不想写太多自定义函数,可以先不指定dtype,把所有数据读进来后,用pd.to_numeric批量处理整数列,把转换失败的转为空值,再过滤掉这些行:

import pandas as pd

# 先不指定dtype,宽松读入
df = pd.read_csv('a.csv', engine='python')

# 对id和age列做数值转换,错误值转成NaN
df['id'] = pd.to_numeric(df['id'], errors='coerce')
df['age'] = pd.to_numeric(df['age'], errors='coerce')

# 删掉包含空值的行(也就是原来转换失败的行)
df_clean = df.dropna(subset=['id', 'age'])

# 最后统一转成目标数据类型
df_clean = df_clean.astype({'id': 'int64', 'name': 'str', 'age': 'int64'})

方案三:自定义on_bad_lines函数,直接跳过错误行

如果你想在读取时就直接跳过那些整数列含字符串的行,可以给on_bad_lines传一个自定义检查函数(注意必须用Python引擎):

import pandas as pd

def filter_bad_lines(line):
    # line是当前行的列表形式,比如第一行数据是['1', '', '25']
    try:
        # 检查id是否能转成整数
        int(line[0].strip())
        # 检查age是否能转成整数
        int(line[2].strip())
        return line  # 没问题就保留该行
    except ValueError:
        return None  # 返回None就会跳过该行

schema = {'id':'int64','name':'str','age':'int'}
df = pd.read_csv('a.csv', dtype=schema, on_bad_lines=filter_bad_lines, engine='python')

这个方法会在读取每一行时直接检查数据是否符合整数要求,不符合的直接跳过,适合你想直接丢弃错误行的场景。

针对你给出的示例CSV,第三行的jj(id列)和空字符串(age列)都会被上面的方法正确处理,不会再触发类型转换错误啦。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 08:07:58