使用pandas时,为什么会出现AttributeError?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用pandas时,为什么会出现AttributeError?相关的知识,希望对你有一定的参考价值。
如何根据条件将NaN值转换为分类值。我在尝试转换Nan值时遇到错误。
category gender sub-category title
health&beauty NaN makeup lipbalm
health&beauty women makeup lipstick
NaN NaN NaN lipgloss
我的DataFrame看起来像这样。我将性别中的NaN值转换为分类值的功能如下所示
def impute_gender(cols):
category=cols[0]
sub_category=cols[2]
gender=cols[1]
title=cols[3]
if title.str.contains('Lip') and gender.isnull==True:
return 'women'
df[['category','gender','sub_category','title']].apply(impute_gender,axis=1)
如果我运行代码我会收到错误
----> 7 if title.str.contains('Lip') and gender.isnull()==True:
8 print(gender)
9
AttributeError: ("'str' object has no attribute 'str'", 'occurred at index category')
答案
这里要注意的一些事情 -
- 如果你只使用两列,那么在4列上调用
apply
是浪费的 - 一般来说,调用
apply
是浪费的,因为它很慢并且不会给你带来任何矢量化的好处 - 在申请中,你正在处理标量,所以你不像
.str
对象那样使用pd.Series
访问器。title.contains
就足够了。或者更热,"lip" in title
。 gender.isnull
是完全错误的,gender
是一个标量,它没有isnull
属性
选项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)
选项2
另一种选择是使用pd.Series.mask
/ pd.Series.where
-
df['gender'] = df.gender.mask(m, 'women')
要么,
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
mask
根据提供的掩码隐式地将新值应用于列。
另一答案
或者只使用loc作为@ COLDSPEED答案的选项3
cond = (df['gender'].isnull()) & (df['title'].str.contains('lip'))
df.loc[cond, 'gender'] = 'women'
category gender sub-category title
0 health&beauty women makeup lipbalm
1 health&beauty women makeup lipstick
2 NaN women NaN lipgloss
另一答案
如果我们使用NaN值,fillna
可以是方法之一:-)
df.gender=df.gender.fillna(df.title.str.contains('lip').replace(True,'women'))
df
Out[63]:
category gender sub-category title
0 health&beauty women makeup lipbalm
1 health&beauty women makeup lipstick
2 NaN women NaN lipgloss
以上是关于使用pandas时,为什么会出现AttributeError?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在指定编码 utf-8 时 pandas read_csv 会出现 unicode 错误? [复制]
为结构实现特征时,为什么会出现“缺少生命周期说明符”或“错误的类型参数数”?
python出现AttributeError: module ‘xxx’ has no attribute ‘xxx’错误时,两个解决办法
Python查看pandas版本报错:AttributeError: module ‘pandas‘ has no attribute ‘_version_‘