给定一个类似于Series
的数据结构:
import pandas as pd
s = pd.Series(['foo', 'bar', 42])
我想获得一个“子系列”pd.Series(['foo','bar'])
,其中所有值都是字符串。我尝试了布尔索引,如下所示: I would like to obtain a 'sub-series' pd.Series(['foo', 'bar'])
in which all values are strings. I've tried Boolean indexing like so:
s[isinstance(s, str)]
但是这会产生一个
KeyError: False
到目前为止,在寻找合适的方法中,我遇到了select,但这对标签施加了一个条件,而不是对值。在这种情况下,如何基于(类型)值进行过滤?
type(...) == ...
,因为这不符合 Python 的风格。推荐使用isinstance
来实现。 - cs95s[[isinstance(x, str) for x in s]]
也在https://dev59.com/-1sW5IYBdhLWcg3wI0RH中提到。 - Kurt Peekbasestring
进行 isinstance 检查是有意义的,例如... 这取决于您是否希望将任何继承自str
的内容视为字符串。 - Jon Clementss.apply(isinstance, args=(str,))
,避免使用lambda。 - Jon Clementsisinstance
也涵盖了继承层次结构。例如,isinstance(True, int)
是真的,但type(True) == int
是假的。在 Python2 中,这尤其重要。因为 Unicode 和 str 被视为不同类型。你可以使用isinstance(x, basestring)
来处理它,但不能像使用type
那样简单。 - cs95