Python Pandas问题:筛选预算内商品名称返回空值求解决
解决Pandas筛选符合预算商品返回空值的问题
问题根源分析
你的代码返回空值大概率是这几个原因:
- 用
max()对商品名称(字符串)取最大值,逻辑完全错误——你要的是符合预算的商品,而非字典序最大的名称;如果没有符合条件的商品,也会返回空。 Cost列可能是字符串类型(比如带$符号),导致数值比较失效,筛选不到任何数据。- 列名拼写/大小写和DataFrame实际列名不匹配。
修正方案
1. 先处理数据类型(如果Cost是字符串)
如果Cost列带了货币符号(比如$),先转成数值类型:
# 清理Cost列,转成float类型 df['Cost'] = df['Cost'].str.replace('$', '', regex=False).astype(float)
2. 根据需求选择正确的筛选逻辑
- 需求1:返回所有符合预算的商品名称
def shopping(cash): # 筛选出Cost<=cash的所有Name,转成列表返回 matched_items = df.loc[df['Cost'] <= cash, 'Name'].tolist() # 无匹配项时返回空列表 return matched_items if matched_items else []
- 需求2:返回符合预算里价格最高的那个商品
def shopping(cash): filtered_df = df[df['Cost'] <= cash] # 按Cost降序排序后取第一个Name;无匹配项返回None if not filtered_df.empty: return filtered_df.sort_values('Cost', ascending=False)['Name'].iloc[0] else: return None
额外检查项
- 确认DataFrame的列名确实是
'Cost'和'Name',别出现大小写错误(比如cost或name)。 - 测试时传入的
cash值是否合理,比如如果所有商品价格都高于cash,自然会返回空/None。
内容的提问来源于stack exchange,提问作者AndyMcCammont
相关产品推荐
相关产品推荐

