满足DataFrame列条件时使用.value_counts()报错,求排查解决
几种Pandas代码报错原因解析
数据集定义
import pandas as pd import numpy as np df=pd.DataFrame( { 'Color': ['red','blue','red','red','green','red','yellow'], 'Type': ['Oil', 'Aluminium', 'Oil', 'Oil', 'Cement Paint', 'Synthetic Rubber', 'Emulsion'], 'Finish' : ['Satin', 'Matte', 'Matte', 'Satin', 'Semi-gloss', 'Satin', 'Satin'], 'Use' : ['Interior', 'Exterior', 'Interior', 'Interior', 'Exterior', 'Exterior', 'Exterior'], 'Price' : [55, 75, 60, 60, 55, 75, 50] } )
尝试1:np.where参数缺失+逻辑错误
代码:
np.where( df['Price'] == 55, df['Color'].value_counts() )
报错信息:KeyError: 'Price'
错误原因:
np.where必须传入3个参数:条件表达式、满足条件时的取值、不满足条件时的取值,你只传了两个,参数缺失导致解析出错,并非真的不存在Price列。- 退一步说,
df['Color'].value_counts()返回的是统计颜色频次的Series,它的索引是颜色值,和原df的行索引完全不匹配,就算补全第三个参数,也无法和条件生成的布尔数组对应赋值,逻辑本身不成立。
尝试2:df.loc语法错误+列不存在
代码:
df.loc[(df['Price'] == 55), df['Category'].value_counts()]
报错信息:KeyError: 'Price'
错误原因:
- 根源是数据集里根本没有
Category列,df['Category']直接触发KeyError,报错信息里的Price是误导——其实df['Price']本身没问题,但因为前面的df['Category']先报错,导致整个语句执行失败。 - 其次,
df.loc的第二个参数是列选择器,只能是列名列表、布尔数组或者切片,你传的value_counts()返回的Series完全不符合语法要求。
尝试3:访问不存在的列
代码:
df['Category'].value_counts()[df['Price'] == 55]
报错信息:KeyError: 'Category'
错误原因:
- 数据集里没有定义
Category列,直接访问df['Category']必然触发KeyError,这是最直接的问题。 - 就算存在
Category列,value_counts()返回的统计结果,用df['Price'] == 55这个布尔数组去索引也不匹配——因为value_counts()的索引是Category的取值,不是原df的行索引,逻辑完全不通。
正确写法
如果需求是统计Price等于55的行中,各Color的出现次数,正确代码如下:
df[df['Price'] == 55]['Color'].value_counts()
执行结果:
red 1 green 1 Name: Color, dtype: int64
内容的提问来源于stack exchange,提问作者Jose Daniel Rojas
相关产品推荐
相关产品推荐

