You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现where方法筛选NBA球员CSV数据遇‘name where not defined’报错求助

CSV NBA球员数据筛选问题解决:query报错与自定义where方法实现

一、解决df.query()报错问题

你的代码中df.query()报错,核心原因是CSV字符串格式错误:Kareem Abdul-Jabbar那一行的college字段值'University of California, Los Angeles缺少闭合单引号,导致pd.read_csv解析时出现异常,破坏了列结构,使得name列无法被正确识别。

修正后的CSV字符串需补上闭合单引号:

csvString = "name,year_start,year_end,position,height,weight,birth_date,college\nAlaa Abdelnaby,1991,1995,F-C,6-10,240,'June 24, 1968',Duke University\nZaid Abdul-Aziz,1969,1978,C-F,6-9,235,'April 7, 1946',Iowa State University\nKareem Abdul-Jabbar,1970,1989,C,7-2,225,'April 16, 1947','University of California, Los Angeles'\nMahmoud Abdul-Rauf,1991,2001,G,6-1,162,'March 9, 1969',Louisiana State University\n"

修正后执行df.query(where)即可正常筛选目标记录,你当前写的"name = 'Alaa Abdelnaby' AND year_start = 1991"语法符合df.query要求,无需修改。

二、实现MySelectQuery类的where筛选功能

基于pandas实现自定义类的筛选逻辑,简洁高效,修改后的代码如下:

import csv
import pandas as pd
import io

class MySelectQuery:
    def __init__(self, table, columns, where):
        self.table = table  # 支持传入CSV字符串或已加载的DataFrame
        self.columns = columns
        self.where = where

    def __str__(self):
        return f"SELECT {self.columns} FROM table WHERE {self.where}"

    def execute(self):
        # 处理CSV字符串转DataFrame
        if isinstance(self.table, str):
            df = pd.read_csv(io.StringIO(self.table), error_bad_lines=False)
        else:
            df = self.table
        
        # 筛选指定列,*表示所有列
        if self.columns != '*':
            df = df[self.columns.split(',')]
        
        # 应用where条件筛选行
        if self.where:
            df = df.query(self.where)
        
        return df

# 使用示例
csvString = "name,year_start,year_end,position,height,weight,birth_date,college\nAlaa Abdelnaby,1991,1995,F-C,6-10,240,'June 24, 1968',Duke University\nZaid Abdul-Aziz,1969,1978,C-F,6-9,235,'April 7, 1946',Iowa State University\nKareem Abdul-Jabbar,1970,1989,C,7-2,225,'April 16, 1947','University of California, Los Angeles'\nMahmoud Abdul-Rauf,1991,2001,G,6-1,162,'March 9, 1969',Louisiana State University\n"

# 创建查询实例,指定列和筛选条件
query = MySelectQuery(table=csvString, columns='name,college', where="name = 'Alaa Abdelnaby' AND year_start = 1991")
# 执行查询并输出结果
result = query.execute()
print(result)

代码说明:

  • __init__方法兼容CSV字符串和DataFrame两种输入,提升灵活性。
  • execute方法完成核心逻辑:将CSV转DataFrame、筛选指定列、应用where条件。
  • __str__方法保留SQL风格输出,方便调试。

若不想依赖pandas,可基于原生csv模块实现,但需要手动解析where条件(拆分AND/OR、比较字段值),复杂度较高,推荐使用pandas方案。

内容的提问来源于stack exchange,提问作者Leon Abdel-Aziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:36:06