更改Pandas数据框类型时的异常处理

5 投票
2 回答
15130 浏览
提问于 2025-04-18 06:16

我有一个Pandas的数据表,里面有一列字符串。我想把这一列的数据转换成浮点数(也就是小数)。但是,有些值因为格式问题不能转换成浮点数。我想把这些“非法字符串”排除掉,只提取那些可以合法转换成浮点数的值。下面是开始的数据:

test=pd.DataFrame()
test.loc[0,'Value']='<3'
test.loc[1,'Value']='10'
test.loc[2,'Value']='Detected'
test.loc[3,'Value']=''

我想要的结果只包含那些可以转换成浮点数的字符串(在这个例子中,就是10):

cleanDF=test['Value'].astype(float)
cleanDF
0    10
Name: Value, dtype: float64

当然,尝试转换那些非法字符串时会出现错误,这是预料之中的:

ValueError: could not convert string to float: <3

如果数据表很大,并且在“值”这一列中有很多非法字符串,有没有简单的方法来解决这个问题呢?

谢谢。

2 个回答

3

你可以在使用 apply 方法的时候,加入 errors=coerce 这个选项。

首先,把所有可以转换成数字的东西都转换成数字,然后去掉 NaN 这些无效值,最后再把结果转换成浮点数。

cleanDF = test.apply(pd.to_numeric, errors = 'coerce').dropna().astype(float)

这样做会只返回你想要的值和数据类型。

>>> cleanDF['Value']

cleanDF['Value']
1    10.0
Name: Value, dtype: float64

5

你可以试试使用数据框(DataFrame)的 apply 方法。写一个包含异常处理的函数,然后把这个函数应用到数据框上。

def test_apply(x):
    try:
        return float(x)
    except ValueError:
        return None

cleanDF = test['Value'].apply(test_apply).dropna()

撰写回答