更改Pandas数据框类型时的异常处理
我有一个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()