如何按指定球员名单从现有pandas DataFrame中筛选创建同结构新表
2020-2021赛季NBA球员统计DataFrame 全明星球员筛选实现
需求说明
- 现有存储2020-2021赛季NBA球员统计数据的pandas DataFrame,同时持有本年度全明星赛入选球员的完整姓名字符串列表
- 目标是从原表中筛选出姓名存在于全明星名单中的球员行,生成列结构、列顺序与原表完全一致的新DataFrame
- 已确认原表姓名字段、全明星列表的姓名元素均为字符串类型,过往多轮尝试的筛选逻辑未得到预期结果
正确实现流程
- 前置字符串清洗
绝大多数筛选失败的根因是字符串存在肉眼不可见的首尾空格、大小写差异,看起来姓名完全一致但实际值不匹配,先完成统一清洗:- 清洗原表姓名字段:
df["player_name"] = df["player_name"].str.strip() - 清洗全明星姓名列表:
all_star_clean = [name.strip() for name in all_star_list]
- 清洗原表姓名字段:
- 向量化行匹配筛选
无需手动逐行遍历判断、逐行拼接新表,直接使用pandas内置的向量化匹配逻辑完成行筛选,天然保留原表全部列结构与列顺序:all_star_player_df = df[df["player_name"].isin(all_star_clean)]
常见问题排查
- 逐行循环实现筛选时,若通过
pd.concat或append手动拼接新行,容易出现列顺序错位、列缺失的问题,无法保证和原表结构完全一致 - 跳过字符串清洗步骤,因隐形空格、大小写差异导致匹配结果为空,误判代码逻辑错误
- 使用表关联(merge)方式筛选时,关联字段未做统一清洗,出现大量匹配偏差
内容的提问来源于stack exchange,提问作者PaulSG
相关产品推荐
相关产品推荐

