如何基于条件表达式从 pandas DataFrame 中删除行

19 浏览
0 Comments

如何基于条件表达式从 pandas DataFrame 中删除行

这个问题已经有答案了

在Pandas中基于列值删除DataFrame行

我有一个pandas DataFrame,我想从它中删除一些行,其中特定列中的字符串长度大于2。

我期望能够像这样做(根据这个答案):

df[(len(df['column name']) < 2)]

但是我得到了以下错误:

KeyError: u'no item named False'

我做错了什么?

(注意:我知道我可以使用df.dropna()来去除包含任何NaN的行,但我没有看到如何基于条件表达式删除行。)

admin 更改状态以发布 2023年5月22日
0
0 Comments

当你执行len(df['column name'])时,你只会得到一个数字,即DataFrame中所包含列的行数(也就是列本身的长度)。如果你想对该列中的每个元素应用len函数,则可以使用df['column name'].map(len)。因此,请尝试执行

df[df['column name'].map(len) < 2]

0
0 Comments

直接回答这个问题的原题目"如何根据条件表达式从pandas数据框中删除行"(我理解这不一定是问题的提出者所面临的问题,但可能对其他遇到这个问题的用户有帮助),其中一种做法是使用drop方法:

df = df.drop(some labels)
df = df.drop(df[].index)

示例

要删除所有“score”列小于50的行:

df = df.drop(df[df.score < 50].index)

“就地”版本(如评论所指出的)

df.drop(df[df.score < 50].index, inplace=True)

多个条件

(参见布尔索引

运算符有:使用括号分组,|表示或,&表示且,~表示非。

要删除所有“score”列小于50且大于20的行

df = df.drop(df[(df.score < 50) & (df.score > 20)].index)

0