7

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

[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

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

df.data = df.data.astype(float, skipbad = True)

(虽然我知道这特别行不通,而且我在 astype 中看不到任何可以做我想做的事情的 kwargs)

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

4

1 回答 1

3

使用convert_objects“尝试为对象列推断更好的 dtype”的方法:

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

实际上,您可以将其应用于整个 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
于 2013-08-21T21:47:57.833 回答