Python 带np.where条件的列的切片字符串不起作用

Python 带np.where条件的列的切片字符串不起作用,python,pandas,numpy,Python,Pandas,Numpy,我的专栏是这样的: 我想通过对包含“-”的“Policy”列进行切片来创建一个新列,如果不包含“-”,它将返回原始值。预期值是“-”之前的字符串 这是我的代码: df['New_col']=np.where(df['Policy'].str.contains('-'),df['Policy'].str.slice(0,df['Policy'].str.find('-'),1),df['Policy']) 但结果是所有人都失去了价值。 请告诉我哪里做错了。我认为解决方案应该是简化-按-拆分值并

我的专栏是这样的:

我想通过对包含“-”的“Policy”列进行切片来创建一个新列,如果不包含“-”,它将返回原始值。预期值是“-”之前的字符串

这是我的代码:

df['New_col']=np.where(df['Policy'].str.contains('-'),df['Policy'].str.slice(0,df['Policy'].str.find('-'),1),df['Policy'])
但结果是所有人都失去了价值。
请告诉我哪里做错了。

我认为解决方案应该是简化-按
-
拆分值并选择第一个值,如果不存在
-
则选择相同的值,因此
np。此处不需要

df['New_col']=df['Policy'].str.split('-').str[0]

预期产量是多少?在
-
之前或
-
之后的值?您的解决方案非常好。但我还是想知道为什么np.where不起作用。在本例中,如果我将df['Policy'].str.find('-')替换为14这样的数字,它就可以工作了。所以问题可能就在这里。@DinhQuangTuan-原因是
df['Policy'].str.slice
如何工作-可能存在类似
df['Policy'].str.slice(0,5)
的传递标量,但在解决方案中不是数组,而是
5
,所以失败了。