如何从数据框中删除行?
问题描述:
我想从数据集中移除异常值。为了做到这一点,我使用的是:如何从数据框中删除行?
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)
我很想接受你的答案,因为它实际上是对我的情况下,最好的解决办法,但有人谷歌搜索这些关键字实际上可能需要删除行(因为不同的原因)所以我会接受另一个。 – MaiaVictor
我有点惊讶,我认为['布尔索引'](http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing)更好,因为下降,但它取决于您。祝你好运 :) – jezrael