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