如何在df.iterrows()期间删除pandas数据帧中的当前行

时间:2015-03-05 10:58:58

标签: python pandas

我想在迭代期间删除当前行 - using df.iterrows(),如果某个列在if条件下失败。

离。

for index, row in df:
     if row['A'] == 0:
          #remove/drop this row from the df
          del df[index] #I tried this but it gives me an error

这可能是一个非常简单的,但我仍然无法弄清楚如何做到这一点。 非常感谢您的帮助!

2 个答案:

答案 0 :(得分:19)

我不知道这是否是伪代码,但你不能删除这样的行,你可以drop

In [425]:

df = pd.DataFrame({'a':np.random.randn(5), 'b':np.random.randn(5)})
df
Out[425]:
          a         b
0 -1.348112  0.583603
1  0.174836  1.211774
2 -2.054173  0.148201
3 -0.589193 -0.369813
4 -1.156423 -0.967516
In [426]:

for index, row in df.iterrows():
    if row['a'] > 0:
        df.drop(index, inplace=True)
In [427]:

df
Out[427]:
          a         b
0 -1.348112  0.583603
2 -2.054173  0.148201
3 -0.589193 -0.369813
4 -1.156423 -0.967516

如果您只想过滤掉这些行,可以执行布尔索引:

df[df['a'] <=0]

会实现同样的目标

答案 1 :(得分:0)

我尝试使用自定义pandas.DataFrame的{​​{3}}解决方案,但是由于出现错误KeyError: '[78] not found in axis',所以我没有使它工作。依此类推,如果遇到相同的错误,可以修复每次 .iterrows()迭代中将数据框的索引拖放到指定索引上的问题。

使用的数据框是从@EdChum中检索的,其中包含在investpy中索引的所有股票/股票数据,并且打印功能是在Investing.com中实现的功能。无论如何,这是使它正常工作的一段代码:

In [1]:

import investpy
from pprint import pprint

In [2]:

df = investpy.get_equities()

pprint(df.head())

Out [2]:

     country               name                           full_name  \
0  argentina            Tenaris                             Tenaris   
1  argentina       PETROBRAS ON     Petroleo Brasileiro - Petrobras   
2  argentina     GP Fin Galicia          Grupo Financiero Galicia B   
3  argentina  Ternium Argentina  Ternium Argentina Sociedad Anónima   
4  argentina      Pampa Energía                  Pampa Energía S.A.   

                      tag          isin     id currency  
0       tenaris?cid=13302  LU0156801721  13302      ARS  
1  petrobras-on?cid=13303  BRPETRACNOR9  13303      ARS  
2          gp-fin-galicia  ARP495251018  13304      ARS  
3                 siderar  ARSIDE010029  13305      ARS  
4           pampa-energia  ARP432631215  13306      ARS  

In [3]:

pprint(df[df['tag'] == 'koninklijke-philips-electronics'])

Out [3]:

      country                     name                   full_name  \
78  argentina  Koninklijke Philips DRC  Koninklijke Philips NV DRC   

                                tag          isin     id currency  
78  koninklijke-philips-electronics  ARDEUT110558  30044      ARS  

In [4]:

for index, row in df.iterrows():
    if row['tag'] == 'koninklijke-philips-electronics':
        df.drop(df.index[index], inplace=True)

In [5]:

pprint(df[df['tag'] == 'koninklijke-philips-electronics'])

Out [5]:

Empty DataFrame
Columns: [country, name, full_name, tag, isin, id, currency]
Index: []

希望这对某人有所帮助!无论如何,还要感谢您的原始答案pprint