python-为什么在使用pandas apply时会出现AttributeError?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-为什么在使用pandas apply时会出现AttributeError?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1946字,纯文字阅读大概需要3分钟。
内容图文
如何根据条件将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')
完整数据集-https://github.com/lakshmipriya04/py-sample
解决方法:
这里要注意的一些事情-
>如果仅使用两列,则调用Apply over 4列是浪费的
>呼叫申请通常很浪费,因为它很慢并且没有向您提供矢量化好处
>在apply中,您要处理标量,因此不要像使用pd.Series对象那样使用.str访问器. title.contains就足够了.或更确切地说,在标题中为“ lip”.
> sex.isnull是完全错误的,gender是一个标量,没有isull属性
选项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
这不仅快速,而且更简单.如果您担心大小写敏感,则可以使包含的检查不区分大小写-
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
掩码根据提供的掩码将新值隐式地应用于列.
内容总结
以上是互联网集市为您收集整理的python-为什么在使用pandas apply时会出现AttributeError?全部内容,希望文章能够帮你解决python-为什么在使用pandas apply时会出现AttributeError?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。