2017-02-23 3 views
0

Ich habe einen Datenrahmen, von dem ich versuche, Elemente zu entfernen, basierend auf dem Wert.Entfernen eines Elements aus .loc basierend auf einer bedingten Anweisung

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

Empfangene Fehler:

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__ 

Zum Beispiel:

df['column1'].iloc[1] 

kehrt:

sum 1.422883 
Name: 4, dtype: float64 

und

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

kehrt:

1.4228829999999981 

Wie kann ich die Attribute vermeiden, die ich oben bin immer, um den Artikel zu entfernen, wenn es weniger ist als 2,5?

+0

wollen Sie die ganze Zeilen löschen möchten, wo 'column1' ist <2.5? – languitar

+0

Können Sie Beispieldaten für den Datenrahmen df? –

+0

@languitar Ja, das ist mein Ziel. – Gary

Antwort

1

Wenn Sie wollen Zeilen auf einer Säule aus einem Rahmen Basis zu entfernen, können Sie wählen Sie einfach die inverse etwa so:

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 
1

Sie Frage ist nicht klar, vorausgesetzt, dass Sie die Zelle entfernen müssen, wenn es weniger als 2,5 ist. Denken Sie daran, dass Sie die Zelle tatsächlich nicht entfernen kann, ersetzen, anstatt die Zelle mit np.Nan

df.ix[df.column1 <2.5, 'column1'] = np.NaN 

es ist auch möglich, ganze Zeile zu entfernen, wenn der Wert kleiner als 2,5

print df[df.joint1_pt >2.5] 
Verwandte Themen