Pandas按数值筛选报错:'str'与'int'无法比较,求解决方法
报错原因及解决方法
报错原因
你用np.array构造数据时,因为数组里同时包含字符串('a'/'b'/'c')和数值,numpy会自动把整个数组的类型统一为字符串类型。这就导致attr11和attr12列虽然看起来是数值,实际存储的都是字符串,当你用字符串和整数10做>比较时,就会触发TypeError。
正确筛选的两种方法
方法1:创建DataFrame时避免统一类型
直接传入列表而非np.array,让pandas自动识别各列的数据类型:
import pandas as pd df1 = pd.DataFrame([ ['a', 5, 9], ['b', 4, 61], ['c', 24, 9]], columns=['name', 'attr11', 'attr12']) # 此时可直接执行筛选 result = df1[df1.attr12 > 10] print(result)
方法2:转换已创建DataFrame的列类型
如果已经生成了原始的DataFrame,先把数值列转换为整数类型,再执行筛选:
import pandas as pd import numpy as np # 你的原始创建代码 df1 = pd.DataFrame(np.array([ ['a', 5, 9], ['b', 4, 61], ['c', 24, 9]]), columns=['name', 'attr11', 'attr12']) # 转换attr11和attr12为整数类型 df1[['attr11', 'attr12']] = df1[['attr11', 'attr12']].astype(int) # 执行筛选 result = df1[df1.attr12 > 10] print(result)
内容的提问来源于stack exchange,提问作者user3732793
相关产品推荐
相关产品推荐

