从CSV数据集列中删除指定姓名后重构数据集的实现问题
问题分析与解决方案
你的代码存在几个关键问题,导致无法正确更新数据集:
- 循环中仅修改了局部变量
company_ranks,但从未将修改后的名单写回原数据集,原始数据根本没发生变化。 - 最后一行的
np.transpose(company_ranks)完全无效:它只处理最后一列的名单,对一维列表转置没有任何意义,也没把结果赋值给任何变量。 - 函数没有返回值,调用后拿不到修改后的数据集。
修正后的代码(分两种场景)
场景1:数据集是Pandas DataFrame,每列对应公司的排名(每行是单个求职者姓名,空值用NaN填充)
import pandas as pd def delete_names(student_name, dataset): # 复制原数据集,避免直接修改输入数据 updated_dataset = dataset.copy() for col in updated_dataset.columns: # 过滤掉目标姓名,同时排除空值(NaN) filtered_ranks = [name for name in updated_dataset[col].tolist() if pd.notna(name) and name != student_name] # 重新赋值列,用NaN填充空缺位置以保持数据集结构一致 updated_dataset[col] = pd.Series(filtered_ranks) return updated_dataset
场景2:数据集的单元格存储完整排名列表(每列的每个单元格是一个姓名列表)
def delete_names(student_name, dataset): updated_dataset = dataset.copy() for col in updated_dataset.columns: for idx in updated_dataset.index: rank_list = updated_dataset.at[idx, col] # 确保是列表类型再操作,避免报错 if isinstance(rank_list, list) and student_name in rank_list: rank_list.remove(student_name) updated_dataset.at[idx, col] = rank_list return updated_dataset
使用说明
调用函数时需要接收返回的修改后数据集:
# 假设original_dataset是你的原始数据集 new_dataset = delete_names("要删除的姓名", original_dataset)
内容的提问来源于stack exchange,提问作者Jonny
相关产品推荐
相关产品推荐

