Der Grund, warum Ihr ursprünglicher Datenrahmen nicht aktualisiert wird, liegt darin, dass die verkettete Indizierung dazu führen kann, dass Sie eine Kopie anstelle einer Ansicht Ihres Datenrahmens ändern. Die Dokumente geben diesen Rat:
Beim Festlegen von Werten in einem Pandas-Objekt muss darauf geachtet werden, dass die sogenannte verkettete Indizierung vermieden wird.
Sie haben einige Alternativen: -
loc
+ Boolesche Indizierung
loc
kann zum Festlegen von Werten verwendet werden und unterstützt Boolesche Masken:
df.loc[df['my_channel'] > 20000, 'my_channel'] = 0
mask
+ Boolesche Indizierung
Sie können Ihrer Serie zuordnen:
df['my_channel'] = df['my_channel'].mask(df['my_channel'] > 20000, 0)
Oder Sie können Ihre Serie an Ort und Stelle aktualisieren:
df['my_channel'].mask(df['my_channel'] > 20000, 0, inplace=True)
np.where
+ Boolesche Indizierung
Sie können NumPy verwenden, indem Sie Ihre Originalserie zuweisen, wenn Ihre Bedingung nicht erfüllt ist. Die ersten beiden Lösungen sind jedoch sauberer, da sie explizit nur die angegebenen Werte ändern.
df['my_channel'] = np.where(df['my_channel'] > 20000, 0, df['my_channel'])