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明显有问题吗?
您可以指定regex=False和na=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。这似乎比指定“不变”系列作为最终参数要自然得多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)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |