给出Series
之类的
import pandas as pd
s = pd.Series(['foo', 'bar', 42])
我想获得一个'子系列'pd.Series(['foo', 'bar'])
,其中所有值都是字符串。我试过像这样的布尔索引:
s[isinstance(s, str)]
但这给出了
KeyError:False
到目前为止,在我搜索合适的方法时,我遇到了select,但这会在标签上强加一个标准,而不是值。在这种情况下,如何根据值(类型)进行过滤?
答案 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