如何从数据框中删除行?

时间:2016-11-12 22:13:52

标签: python pandas

我正在尝试从数据集中删除异常值。为了做到这一点,我正在使用:

df = df[df.attr < df.attr.mean() + df.attr.std()*3]

这似乎按预期工作,但是,当我做类似的事情时:

for i in xrange(df.shape[0]):
    print df.attr[i]

然后我得到KeyError。看起来像Pandas实际上并没有返回一个新的DataFrame行丢弃。我如何实际删除这些行,并获得功能齐全的DataFrame返回?

2 个答案:

答案 0 :(得分:2)

我认为需要DataFrame.ix

for i in xrange(df.shape[0]):
    print df.ix[i, 'attr']

Series.iloc

for i in xrange(df.shape[0]):
    print df.attr.iloc[i]

使用Series.iteritems的简单解决方案:

for i, val in df.attr.iteritems():
    print (val)

答案 1 :(得分:2)

首先,找到符合条件的指数(在你的情况下是df.attr&lt; df.attr.mean()+ df.attr.std()* 3)。

x = df.loc[:,attr] < df.attr.mean() + df.attr.std()*3

接下来,使用DataFrame.drop

df.drop(x[x].index)

有关详细信息,请参阅How to drop a list of rows from Pandas dataframe?等答案