有什么方法可以在将pandas系列从str转换为float时跳过不可转换的行?

use*_*645 7 python pandas

我有一个从csv文件创建的pandas数据框.此数据框的一列包含最初强制转换为字符串的数字数据.大多数条目都是类似数字的,但有些条目包含非数字的各种错误代码.我事先不知道所有的错误代码是什么或有多少.因此,例如,数据框可能如下所示:

[In 1]: df
[Out 1]:
            data     OtherAttr
MyIndex
0           1.4        aaa
1           error1     foo
2           2.2        bar
3           0.8        bar
4           xxx        bbb
...
743733      BadData    ccc
743734      7.1        foo
Run Code Online (Sandbox Code Playgroud)

我想将df.data其转换为浮点数并抛弃任何无法正确转换的值.这是否有内置功能?就像是:

df.data = df.data.astype(float, skipbad = True)
Run Code Online (Sandbox Code Playgroud)

(虽然我知道具体不起作用,但我没有看到任何形式的kwargs做我想做的事)

我想我可以编写一个函数try然后使用pandas apply或者map,但这似乎是一个不优雅的解决方案.这一定是一个相当普遍的问题,对吧?

And*_*den 3

使用convert_objects“尝试为对象列推断更好的数据类型”的方法:

In [11]: df['data'].convert_objects(convert_numeric=True)
Out[11]: 
0    1.4
1    NaN
2    2.2
3    0.8
4    NaN
Name: data, dtype: float64
Run Code Online (Sandbox Code Playgroud)

事实上,您可以将其应用于整个 DataFrame:

In [12]: df.convert_objects(convert_numeric=True)
Out[12]: 
         data OtherAttr
MyIndex                
0         1.4       aaa
1         NaN       foo
2         2.2       bar
3         0.8       bar
4         NaN       bbb
Run Code Online (Sandbox Code Playgroud)