test['b']=test['a'].mask(test['a'].str.contains('a3-'),test['a'].str.extract('\d$'))报错incompatinle indexer with dataframe
时间: 2023-09-27 18:05:49 浏览: 78
这个错误可能是由于 `mask` 函数的参数传递有误导致的。`mask` 函数的第一个参数是一个条件表达式,第二个参数是一个替换值。在你的代码中,第一个参数是 `test['a'].str.contains('a3-')`,这个表达式返回一个布尔类型的 Series,表示 `test['a']` 中是否包含字符串 `'a3-'`。而第二个参数是 `test['a'].str.extract('\d$')`,这个表达式返回一个 Series,表示 `test['a']` 中以数字结尾的子串。这两个表达式返回的 Series 的长度可能不一样,导致了错误。
如果你想要将 `test['a']` 中包含字符串 `'a3-'` 的行的 `b` 列替换为以数字结尾的子串,可以使用下面的代码:
```
test.loc[test['a'].str.contains('a3-'), 'b'] = test.loc[test['a'].str.contains('a3-'), 'a'].str.extract('(\d)$')
```
这个代码中使用了 `loc` 函数选择了满足条件的行,然后使用 `str.extract` 函数提取数字,最后将结果赋给了 `b` 列。
阅读全文