这里需要注意一些事情 -
- 如果您只使用两列,请调用
apply
超过 4 列是浪费
- Calling
apply
既浪费又低效,因为它很慢,使用大量内存,并且没有为您提供矢量化优势
- 在应用中,您正在处理标量,因此您不使用
.str
访问器就像你一样pd.Series
目的。title.contains
就足够了。或者更Python地讲,"lip" in title
.
-
gender.isnull
对口译员来说听起来完全错误,因为gender
是一个标量,它没有isnull
属性
Option 1
np.where
m = df.gender.isnull() & df.title.str.contains('lip')
df['gender'] = np.where(m, 'women', df.gender)
df
category gender sub-category title
0 health&beauty women makeup lipbalm
1 health&beauty women makeup lipstick
2 NaN women NaN lipgloss
这不仅速度快,而且更简单。如果您担心区分大小写,您可以将contains
检查不区分大小写 -
m = df.gender.isnull() & df.title.str.contains('lip', flags=re.IGNORECASE)
Option 2
另一种选择是使用pd.Series.mask
/pd.Series.where
-
df['gender'] = df.gender.mask(m, 'women')
Or,
df['gender'] = df.gender.where(~m, 'women')
df
category gender sub-category title
0 health&beauty women makeup lipbalm
1 health&beauty women makeup lipstick
2 NaN women NaN lipgloss
The mask
根据提供的掩码将新值隐式应用于列。