我想创建一个新列,如果在现有列中找到子字符串,它将返回True,反之亦然。
因此,在此示例中,我想在a列中搜索子字符串“ abc”,并创建一个布尔列b(无论a列是否包含字符串)。
a b
zabc True
wxyz False
abcy True
defg False
我尝试过类似的事情
df['b'] = df['a'].map(lambda x: True if 'abc' in x else False)
但这给了我一个错误,提示“类型'NoneType'的参数不可迭代”
我也尝试过
df['b'] = False
df['b'][df['a'].str.contains('abc')] = True
但是我收到错误消息“无法使用包含NA / NaN值的向量进行索引”
有人可以解释这些错误以及我该怎么做。我已经确认['a']存在并且包含值。但是有些行包含None值。
答案 0 :(得分:2)
这是怎么做的。
df["b"] = df["a"].str.contains("abc")
关于您的错误。
似乎您的a列中有np.nan值,然后str.contain方法将为这些值返回np.nan,当您尝试使用包含np.nan值的数组进行索引时,pandas告诉您不可能。
答案 1 :(得分:1)
这不是最佳解决方案,但是您可以使用pd.isnull()
检查空值,或使用str()
将空值转换为字符串。
df = pd.DataFrame({'a':['zabc', None, 'abcy', 'defg']})
df['a'].map(lambda x: True if 'abc' in str(x) else False)
或
df['a'].map(lambda x: False if pd.isnull(x) or 'abc' not in x else True)
重用:
0 True
1 False
2 True
3 False
Name: a, dtype: bool
答案 2 :(得分:0)