当前位置: 首页 > 知识库问答 >
问题:

如何从基于条件表达式[重复]的熊猫DataFrame中删除行

东郭宏深
2023-03-14

我有一个pandas数据框,我想从中删除特定列中字符串长度大于2的行。

我希望能够做到这一点(根据此答案):

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

但我只是得到了错误:

KeyError: u'no item named False'

我做错了什么?

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

共有3个答案

王锐
2023-03-14

您可以将DataFrame分配给其自身的筛选版本:

df = df[df.score > 50]

这比删除更快:

%%timeit
test = pd.DataFrame({'x': np.random.randn(int(1e6))})
test = test[test.x < 0]
# 54.5 ms ± 2.02 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%%timeit
test = pd.DataFrame({'x': np.random.randn(int(1e6))})
test.drop(test[test.x > 0].index, inplace=True)
# 201 ms ± 17.9 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%%timeit
test = pd.DataFrame({'x': np.random.randn(int(1e6))})
test = test.drop(test[test.x > 0].index)
# 194 ms ± 7.03 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
邹博裕
2023-03-14

当您执行len(df['column name'])时,您只得到一个数字,即数据帧中的行数(即列本身的长度)。如果要对列中的每个元素应用len,请使用df['column name'].map(len)。所以试试看

df[df['column name'].map(len) < 2]
苍恩
2023-03-14

要直接回答此问题的原始标题“如何基于条件表达式从pandas数据帧中删除行”(我理解这不一定是OP的问题,但可以帮助其他用户遇到此问题),一种方法是使用drop方法:

df = df.drop(some labels)
df = df.drop(df[<some boolean condition>].index)

实例

删除列“score”所在的所有行

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

到位版本(如评论中指出的)

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

多重条件

(请参见布尔索引)

运算符为:|for

删除列“score”所在的所有行

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

 类似资料:
  • 我试图通过比较对象中的多个字段来从数组中找到重复的对象。 我想将对象的两个字段与同一数组的其他对象进行比较。 我想露营只是名称和 lname,忽略我的对象内的第 3 个字段 如何查找和删除输出如下的重复对象

  • 问题内容: 我有以下数据框 基本上我可以如下过滤行 我可以如下所示删除/删除一行 但是我想根据条件删除一定数量的行,我该怎么做? 问题答案: 最好的是但需要反转条件-使所有值相等且更高,如下所示: 与功能相同: 另一种可能的解决方案是通过以下方法反转掩码:

  • 问题内容: 现在,我知道如何检查数据框中多列中的特定值。但是,我似乎无法弄清楚如何基于布尔响应执行if语句。 例如: 使用和遍历目录并将特定文件读入数据框。 现在检查跨多个列的数据框。第一个值是列名(column1),下一个值是我在该列(香蕉)中寻找的特定值。然后,我正在检查另一列(column2)的特定值(绿色)。如果这两个都是正确的,我想执行一项特定的任务。但是,如果它是错误的,我想做其他事情

  • 我想删除我的DataFrame中的第一列,我在网上找到了答案。答案是删除列1、2和4。我想知道为什么这行代码可以删除列,轴在这里的作用是什么?

  • 当日期列的值在日期列表中时,我想从熊猫数据帧中删除行。以下代码不起作用: 我得到以下错误: ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。

  • 我有一个6000行数据框,我想删除所有值小于2的行。我目前的尝试是:df=煤[煤['值'] 我已经附上了我的df的快照,我想删除较小的值。我对python还是比较陌生的,所以请容忍我。 https://i.stack.imgur.com/3mbA7.png