在Pandas中,如何根据值的类型过滤系列?

时间:2017-10-29 10:33:26

标签: python pandas

给出Series之类的

import pandas as pd

s = pd.Series(['foo', 'bar', 42])

我想获得一个'子系列'pd.Series(['foo', 'bar']),其中所有值都是字符串。我试过像这样的布尔索引:

s[isinstance(s, str)]

但这给出了

  

KeyError:False

到目前为止,在我搜索合适的方法时,我遇到了select,但这会在标签上强加一个标准,而不是值。在这种情况下,如何根据值(类型)进行过滤?

3 个答案:

答案 0 :(得分:9)

使用apply或列表理解:

s[s.apply(lambda x: isinstance(x, str))]

同样,谢谢Jon Clements♦

s[s.apply(isinstance, args=(str,))]
s[[isinstance(x, str) for x in s]]

所有回报:

0    foo
1    bar
dtype: object

编辑:

不建议这样做,谢谢cᴏʟᴅsᴘᴇᴇᴅ

s[s.apply(type) == str]

答案 1 :(得分:1)

float x = y = z = 0.0; for (int i = 0; i < cleaned->points.size(); i++){ x += cleaned->points[i].x; y += cleaned->points[i].y; z += cleaned->points[i].z; } x = x / cleaned->points.size(); y = y / cleaned->points.size(); z = z / cleaned->points.size(); 的一个小技巧:

pd.to_numeric

如果某个项目是数字,则会成功强制(不是s[pd.to_numeric(s, errors='coerce').isnull()] 0 foo 1 bar dtype: object ),因此会从最终结果中删除。

答案 2 :(得分:1)

如上所述,我会使用pd.to_numeric

或者,您可以使用str.isalpha

In [109]: s[s.str.isalpha().notnull()]
Out[109]:
0    foo
1    bar
dtype: object