我正在尝试从数据集中删除异常值。为了做到这一点,我正在使用:
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
返回?
答案 0 :(得分:2)
我认为需要DataFrame.ix
:
for i in xrange(df.shape[0]):
print df.ix[i, 'attr']
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?等答案