令人不悦的Error-TypeError: Cannot perform ‘ror_‘ with a dtyped [...

简介: 令人不悦的Error-TypeError: Cannot perform ‘ror_‘ with a dtyped [...

简说Python,号主老表,Python终身学习者,数据分析爱好者,从18年开始分享Python知识,原创文章227篇,写过Python、SQL、Excel入门文章,也写过Web开发、数据分析文章,老表还总结整理了一份2022Python学习资料和电子书资源,关注后私信回复:2022 即可领取。

大家好,我是老表,这个系列会记录我在编程中遇到的一些问题和解决方法,将直接以遇到的报错作为标题,这样更能方便其他学习者在浏览器中搜索到问题解决方法,也欢迎大家在评论、留言区多交流,谈谈自己的理解或者问题。

比如令人不悦的--requests.exceptions.ProxyError就是一个很好的示范。

今天在处理一个数据的时候,执行了一行代码,结果出现了大问题!!!

# 简单处理数据,去除推荐热搜和置顶热搜
wb_hot_data.drop(wb_hot_data[wb_hot_data['wb_rank']=='•' | pd.isna(wb_hot_data['wb_rank'])].index)

image.pngimage.png

看着这一堆报错,我估计代码也很委屈!!!

先直接说怎么解决:

# 简单处理数据,去除推荐热搜和置顶热搜
wb_hot_data.drop(wb_hot_data[(wb_hot_data['wb_rank']=='•') | pd.isna(wb_hot_data['wb_rank'])].index)

也许你没有看出来改了什么,其实就是给wb_hot_data['wb_rank']=='•'加了一个括号。

接下来我们用示例数据说说这个错误是怎么产生的?

import pandas as pd
import numpy as np
a=np.array([['a',2,3],['b',5,6],[np.NaN,8,9],['a',4,7]])
df1=pd.DataFrame(a,columns=list('ABC'))
print(df1)
'''
  A  B  C
0    a  2  3
1    b  5  6
2  nan  8  9
3    a  4  7
'''

我想删除A列中值为'a'或者None的行:

df1.drop(df1[df1['A']=='a' | pd.isna(df1['A'])].index)

这样写好像没什么毛病,但是运行就是会出现标题中讨厌的错误。

于是谷歌查了下,找到了一篇同错误的文章,评论区人博主在一个表达式两边加上括号,是优先级问题。

image.png

看到这个回答,我悟了,基础不扎实果然是会吃亏的。

df1.drop((df1[df1['A']=='a') | pd.isna(df1['A'])].index)
# 加个括号就可以啦
'''
 A B C
1 b 5 6
2 nan 8 9
'''

我们会发现这里nan没有被删除?是因为初始化是这个nan已经被自动转换成字符串了,所以无法识别成nan被删除,这个问题我们其他文章再说,大家也可以留言说说自己看法。

补充讲一下另一种情况,当A列为数值类型数据,看看会怎么样?

import pandas as pd
import numpy as np
# a=np.array([['a',2,3],['b',5,6],[np.NaN,8,9],['a',4,7]])
a=np.array([[1,2,3],[2,5,6],[np.NaN,8,9],[2,4,7]])
df1=pd.DataFrame(a,columns=list('ABC'))
print(df1)
'''
 A    B    C
0  1.0  2.0  3.0
1  2.0  5.0  6.0
2  NaN  8.0  9.0
3  2.0  4.0  7.0
'''
# 我想删除A列中值为2或者None的行
df1.drop(df1[df1['A']==2 | pd.isna(df1['A'])].index)
'''
A B C
1 2.0 5.0 6.0
2 NaN 8.0 9.0
3 2.0 4.0 7.0
'''

这个时候我们发现,没有报错,但是结果明显有问题,这是为什么呢?

这是因为数值类型是可以直接和bool类型数据进行运算,所以没有报错;结果出错是因为按运算符优先级,先进行2 | pd.isna(df1['A']),得出来的都是true(2是一个确定的数,在bool类型为true,true和数值进行比较会转变成1),然后和df1['A']进行==运算,会发现只有第一行的1是满足的(1==ture),所以最后会删除第一行。

image.png

所以还是运算符优先级问题,还是加上()就可以解决问题啦。

df1.drop(df1[(df1['A']==2) | pd.isna(df1['A'])].index)
'''
 A B C
0 1.0 2.0 3.0
'''
# 为什么这里可以把nan值删除?大家可以讨论讨论

所以我们今天遇到的这个问题是由运算符优先级引起的 字符串类型数据和bool类型数据不能进行|运算。

最后附上Python运算符优先级和结核性一览表。

image.png


相关文章
|
关系型数据库 MySQL
【Mysql】服务没有响应控制功能。 请键入 NET HELPMSG 2186 以获得更多的帮助。
解决方法: 1. 下载dll文件 https://www.aliyundrive.com/s/oV6GgghtPkN 2.将文件放置在mysql bin文件夹下 3. 重新启动Mysql,发现启动成功了!🚀
1627 1
|
编解码 Linux
Linux MIPI DSI驱动调试笔记-设备树DCS格式序列之配置LCD初始化代码(二)
Linux MIPI DSI驱动调试笔记-设备树DCS格式序列之配置LCD初始化代码(二)
2486 0
|
缓存 数据库
实现微信扫描二维码关注公众号,直接注册登录网站
互联网时代,不管是以哪种形式存在的应用,移动端或者PC网站,注册登录功能是用户访问应用的第一步,可以说,注册登录用的方不方便在一定程度上能决定用户的去留。对于用户来说,能够越简单,不用动手做过多操作就能达到同样效果的功能是最好不过的。今天就来介绍一下PC网站如何通过扫描微信二维码关注公众号,直接完成注册登录。
2243 0
实现微信扫描二维码关注公众号,直接注册登录网站
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
563 60
|
人工智能 自然语言处理 数据管理
阿里云百炼产品月刊【2024年7月】
阿里云百炼产品月刊【2024年7月】,涵盖本月产品和功能发布、市场活动和应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
966 0
|
IDE 开发工具 Python
selenium.common.exceptions.NoSuchDriverException: Message: Unable to obtain driver for MicrosoftEdge
selenium.common.exceptions.NoSuchDriverException: Message: Unable to obtain driver for MicrosoftEdge
1298 3
|
安全 Java 应用服务中间件
除了提供者名称错误,还有哪些原因可能导致`NoSuchProviderException`异常
`NoSuchProviderException`异常不仅可能由提供者名称错误引起,还可能由于提供者未正确安装、JVM版本不兼容、安全策略限制或类路径问题等原因导致。
261 1
|
Linux 网络安全 虚拟化
适用于Linux的Windows子系统(WSL1)的安装与使用记录
并放到启动文件夹,就可以开机自动启动了。
1522 0
|
数据处理 Python
【Python】已解决:SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFram
【Python】已解决:SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFram
2520 1
|
机器学习/深度学习 缓存 数据可视化
[Linformer]论文实现:Linformer: Self-Attention with Linear Complexity
[Linformer]论文实现:Linformer: Self-Attention with Linear Complexity
548 1
[Linformer]论文实现:Linformer: Self-Attention with Linear Complexity

热门文章

最新文章