python pandas:在pandas数据帧中查找字符串元素

python pandas:在pandas数据帧中查找字符串元素,python,pandas,python-3.5,Python,Pandas,Python 3.5,假设我有一个熊猫数据帧: df = pd.DataFrame({'a': [1,2,3,'e',4], 'b': [1,2,3,4,5]}) 我想要一个索引,其中df的元素是一个字符串。 除了逐个元素地检查之外,我如何才能做到这一点 哪个又慢又低效?这并不是你想要的。而是返回一个元素索引,无法转换为数值: In [231]: df Out[231]: a b 0 1 1 1 2 2 2 3 3 3 e 4 4 4 5 In [232]: df.apply(pd.t

假设我有一个熊猫数据帧:

df = pd.DataFrame({'a': [1,2,3,'e',4], 'b': [1,2,3,4,5]})
我想要一个索引,其中df的元素是一个字符串。 除了逐个元素地检查之外,我如何才能做到这一点
哪个又慢又低效?

这并不是你想要的。而是返回一个元素索引,无法转换为数值:

In [231]: df
Out[231]:
   a  b
0  1  1
1  2  2
2  3  3
3  e  4
4  4  5

In [232]: df.apply(pd.to_numeric, errors='coerce').isnull().any(1)
Out[232]:
0    False
1    False
2    False
3     True
4    False
dtype: bool

In [233]: df.loc[df.apply(pd.to_numeric, errors='coerce').isnull().any(1)]
Out[233]:
   a  b
3  e  4
或者,只检查
字符串
对象
)列:


df.applymap(lambda x:isinstance(x,str))
?您期望的输出是什么?始终使用通用Python标记。如果您的问题是关于特定版本的,则仅使用特定于python版本的标记。这一个确实不是/而且,您已经放弃了对
'a'
列进行快速高效操作的所有希望,因为它使用
dtype=object
。注意,使用
apply
et.al.的解决方案本质上是针对循环的。@Zero注意,该解决方案本质上等同于以“缓慢且低效”的方式“逐个检查元素”。编辑:这一点,我相信您知道,但主要是想让OP知道。同意,我指出,OP可以避免显式for循环和设置值。注意:如果目的是在
df=pd.DataFrame中捕获
'3'
({'a':[1,2','3','e',4],'b':[1,2,3,4,5]})
,这可能不起作用。
df选择数据类型('object')。应用(pd.to_numeric,errors='concurve').isnull()。任何(1)
都可能会减少对数值列的查找?
In [237]: df.select_dtypes(['object']).apply(pd.to_numeric, errors='coerce').isnull().any(1)
Out[237]:
0    False
1    False
2    False
3     True
4    False
dtype: bool

In [238]: df[df.select_dtypes(['object']).apply(pd.to_numeric, errors='coerce').isnull().any(1)]
Out[238]:
   a  b
3  e  4