如何用含df.drop的函数移除DataFrame指定列含目标值的多行?
问题解决:移除DataFrame指定列中包含目标值列表的行
错误原因分析
你遇到的问题有三个核心点:
- 调用函数时,列名要传字符串形式的
'Age',而非直接写Age——Python会把Age当作变量,但你并未定义过这个变量,因此触发"Age未定义"的报错。 - 函数里的
df['column']写法错误,这里的'column'是固定字符串,会去DataFrame里找名为column的列,而非你传入的column参数对应的列,要改成df[column]。 - 用
== x无法匹配列表中的多个值,批量判断列值是否在目标列表里,得用Pandas的isin()方法。
修正后的函数
推荐直接通过布尔索引筛选保留需要的行(避免inplace=True引发的意外问题):
import pandas as pd def rem_out(df, column, x): # 取反筛选出不在目标列表里的行 df = df[~df[column].isin(x)] return df
如果习惯用drop方法,也可以这么写:
def rem_out(df, column, x): drop_indices = df[df[column].isin(x)].index df = df.drop(drop_indices) return df
正确调用方式
先定义要移除的值列表,再传入字符串格式的列名:
data = {'Name': ['Tom', 'nick', 'krish', 'jack'], 'Age': [20, 21, 19, 18]} sample = pd.DataFrame(data) remove_these = [20, 21] # 列名传字符串'Age' result = rem_out(sample, 'Age', remove_these) print(result)
理想输出
Name Age 2 krish 19 3 jack 18
内容的提问来源于stack exchange,提问作者Adriana
相关产品推荐
相关产品推荐

