如何从数据框中删除行?

问题描述:

我想从数据集中移除异常值。为了做到这一点,我使用的是:如何从数据框中删除行?

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

首先,找到符合标准的指标(在你的情况是df.attr < 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?了解更多信息

我觉得需要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] 

Simplier溶液Series.iteritems

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

我很想接受你的答案,因为它实际上是对我的情况下,最好的解决办法,但有人谷歌搜索这些关键字实际上可能需要删除行(因为不同的原因)所以我会接受另一个。 – MaiaVictor

+0

我有点惊讶,我认为['布尔索引'](http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing)更好,因为下降,但它取决于您。祝你好运 :) – jezrael