Pandas drop函数在for循环中不起作用?

时间:2017-04-27 21:12:12

标签: python pandas

一切! 我对此非常困惑,因为我的生活无法弄清楚错误。 我试图浏览数据框中的所有字符串,并删除那些不包含字符串'Barry Bonds'的字符串。

到目前为止,我已经设法能够按索引删除行:

bb_db.drop(bb_db.index[1])

这在将该行放在该索引处是成功的,但是当我将其抛入此for循环时:

for i in range(len(bb_db)):
    if 'Barry Bonds' in bb_db['player_names'][i]:
        bb_db.drop(bb_db.index[i])
        print (i)

我得到整个数据帧,即使i变量打印出大量索引,if语句为true。

谢谢!

2 个答案:

答案 0 :(得分:6)

drop不会改变您当前的DataFrame,除非您要求inplace=True

话虽如此,for循环几乎肯定不是最简单的方法。为什么不在列上使用str访问者进行布尔索引,即使用str.contains

bb_db[~bb_db.player_names.str.contains('Barry Bonds')]

答案 1 :(得分:0)

这应该有效

for i in range(len(bb_db)):
    if 'Barry Bonds' in bb_db['player_names'][i]:
        bb_db = bb_db.drop(bb_db.index[i])
        # or this works too..
        # bb_db.drop(bb_db.index[i], inplace=True)
        print (i)