熊猫-numpy.where问题

Jes*_*roe 2 python numpy dataframe pandas

我有以下代码行:

# slice off the last 4 chars in name wherever its code contains the substring '-CUT'
df['name'] = np.where(df['code'].str.contains('-CUT'),
                      df['name'].str[:-4], df['name'])
Run Code Online (Sandbox Code Playgroud)

但是,这似乎无法正常工作。它将最后4个字符切成正确的列,但也将其用于代码为None / empty(几乎所有实例)的行。

我如何使用np.where明显有问题吗?

jpp*_*jpp 5

np.where

您可以指定regex=Falsena=False作为参数,pd.Series.str.contains以便仅更新满足条件的行:

df['name'] = np.where(df['code'].str.contains('-CUT', regex=False, na=False),
                      df['name'].str[:-4], df['name'])
Run Code Online (Sandbox Code Playgroud)

regex=False此标准并非严格必要,但可以提高性能。na=False确保不能通过str方法return 处理的任何类型False

pd.DataFrame.loc

或者,您可以使用pd.DataFrame.loc。这似乎比指定“不变”系列作为最终参数要自然得多np.where

mask = df['code'].str.contains('-CUT', regex=False, na=False)
df.loc[mask, 'name'] = df['name'].str[:-4]
Run Code Online (Sandbox Code Playgroud)