如何编写传入set_num筛选Pandas DataFrame对应行的函数
原有代码问题排查
你写的自定义函数存在3个核心错误:
- 参数缺失:需求是调用时传入
set_num字符串参数即可返回结果,但现有函数只定义了df一个入参,没有接收目标匹配值的位置。 - 索引方法误用:
iloc是pandas中按整数位置取数的方法,不支持传入列名字符串做筛选,也没有实现按列值匹配行的核心逻辑。 - 返回值错误:
display()是Jupyter环境的打印函数,本身无返回值,放在return语句后无法拿到可复用的筛选结果,仅能触发打印动作。
正确实现方案
固定使用sets数据表的版本
如果函数固定操作你提到的sets这个DataFrame,直接按如下方式定义即可,调用时只需要传入目标set_num字符串:
def select_set_row(set_num: str): # 匹配set_num列和传入值完全一致的行,返回结果DataFrame return sets[sets['set_num'] == set_num]
调用示例:
# 传入目标set_num字符串即可拿到匹配行 result = select_set_row("你要查找的set_num值")
通用兼容版本
如果需要函数兼容不同的DataFrame输入,可以把DataFrame也作为可选入参,复用性更强:
def select_set_row(df, set_num: str): """ 参数说明: df: 要筛选的源DataFrame set_num: 要匹配的set_num字符串值 返回值:匹配到的所有行组成的DataFrame """ return df[df['set_num'] == set_num]
调用示例:
result = select_set_row(sets, "你要查找的set_num值")
补充说明:如果你实际要匹配的是
num_parts列的数值,只需要把筛选条件替换为df[df['num_parts'] == int(set_num)]即可,注意提前把传入的字符串参数转为整数类型,避免类型不匹配导致筛选结果为空。
内容的提问来源于stack exchange,提问作者max
相关产品推荐
相关产品推荐

