test['b']=test['a'].mask(test['a'].str.contains('a3'),test['a'].str.extract('\d$'))报错incompatinle indexer with dataframe
时间: 2023-09-24 17:03:22 浏览: 79
根据你提供的代码,我猜测你想要将 DataFrame 中 `a` 列中以 `a3` 结尾的字符串的末尾数字提取出来,然后赋值给 `b` 列对应的行。但是你的代码中存在一些问题。
首先,`mask()` 方法的参数应该是一个布尔型的 Series,表示要对哪些行进行条件判断。但是你的代码中使用了 `str.contains()` 方法,这会返回一个布尔型的 Series,但是此时该 Series 中的元素值不是 True/False,而是字符串 `a3` 在该行中出现的位置。这显然不是你想要的结果。
其次,即使你成功地得到了一个布尔型的 Series,你还需要将提取出来的数字赋值给 `b` 列对应的行。但是你的代码中并没有指定要对哪些行进行赋值操作,因此会报错。
最后,你使用了 `str.extract()` 方法来提取末尾数字,但是该方法只能作用于 Series,而不能作用于 DataFrame。因此你需要将 `a` 列先转换成 Series,再使用 `str.extract()` 方法。
下面是修改后的代码,你可以尝试一下:
```
test['b'] = test['a'].str.extract('(\d)$')
test.loc[test['a'].str.endswith('a3'), 'b'] = test.loc[test['a'].str.endswith('a3'), 'a'].str.extract('(\d)$')
```
这段代码首先将 `a` 列中的末尾数字提取出来,并赋值给 `b` 列对应的行。然后,对于 `a` 列中以 `a3` 结尾的行,再次提取末尾数字,并赋值给 `b` 列对应的行。
阅读全文
相关推荐












