如何从Pandas DataFrame的Sport列删除多行冬季项目数据
解决方法
你之前用drop()出错的核心原因是没指定要基于Sport列来筛选删除行,drop()默认是按行/列的标签(索引)操作,不是直接识别列值。另外inplace=True时不需要把结果赋值给新变量,它会直接修改原DataFrame,赋值后得到的会是None。
给你两种可行的实现方式:
方法一:布尔索引筛选(推荐)
直接筛选出Sport列不属于冬季项目的行,逻辑直观且不易出错:
# 定义要排除的冬季项目列表 winter_sports = ["luge", "curling", "speed skating", "skeleton bob", "ski jump", "cross country skiing", "bobsleigh"] # 筛选出Sport不在列表内的行,生成新DataFrame newdf = df[~df["Sport"].isin(winter_sports)]
这里~表示取反,isin()用来判断列值是否存在于指定列表中。
方法二:正确使用drop()函数
如果一定要用drop(),需要先定位到冬季项目对应的行索引,再执行删除:
winter_sports = ["luge", "curling", "speed skating", "skeleton bob", "ski jump", "cross country skiing", "bobsleigh"] # 获取要删除的行索引 drop_indices = df[df["Sport"].isin(winter_sports)].index # 删除对应行,生成新DataFrame newdf = df.drop(drop_indices, axis=0) # 若想直接修改原DataFrame(不推荐,易误改原始数据): # df.drop(drop_indices, axis=0, inplace=True)
另外你之前写的["sport":"luge", ...]是错误语法,列表中不能用冒号关联列名和值,这种写法也无法让Pandas识别你要操作的是Sport列。
内容的提问来源于stack exchange,提问作者InvisibleInk
相关产品推荐
相关产品推荐

