根据条件语句从.loc中删除项目

时间:2017-02-23 15:13:54

标签: python pandas

我有一个数据框,我试图根据值删除项目。

for i in range (1, len(df['column1'])):
    if df['column1'].iloc[i][0] < 2.5:
        del df['column1'].iloc[i]

收到错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-80-8b343357b723> in <module>()
     16 for i in range (1, len(df_agg2['water_amount']-1)):
     17     if df_agg2['water_amount'].iloc[i][0] < 2.5:
---> 18         del df_agg2['water_amount'].iloc[i]

AttributeError: __delitem__

例如:

df['column1'].iloc[1]

返回:

sum    1.422883
Name: 4, dtype: float64

df['column1'].iloc[1][0] 

返回:

1.4228829999999981

如何避免上面提到的AttributeError,以便在项目小于2.5时删除它?

2 个答案:

答案 0 :(得分:1)

您的问题不明确,假设您需要在小于2.5时移除单元格。请记住,您实际上无法移除单元格,而是使用np.Nan

替换该单元格
df.ix[df.column1 <2.5, 'column1'] = np.NaN

如果值小于2.5

,也可以删除整行
print df[df.joint1_pt >2.5] 

答案 1 :(得分:1)

如果你想根据一个列从一个框架中删除行,你可以像这样选择反向:

In [7]: df = pd.DataFrame({'foo': ['test', 'this', 'not'], 'column1': [13, 0.2, 10]})

In [8]: df
Out[8]:
   column1   foo
0     13.0  test
1      0.2  this
2     10.0   not

In [9]: df[df.column1 >= 2.5]
Out[9]:
   column1   foo
0     13.0  test
2     10.0   not