Ich habe einen Pandas-Datenrahmen, der aussieht wie:
d = {'some_col' : ['A', 'B', 'C', 'D', 'E'],
'alert_status' : [1, 2, 0, 0, 5]}
df = pd.DataFrame(d)
Nicht wenige Aufgaben in meinem Job erfordern die gleichen Aufgaben bei Pandas. Ich fange an, standardisierte Funktionen zu schreiben, die einen Datenrahmen als Parameter verwenden und etwas zurückgeben. Hier ist eine einfache:
def alert_read_text(df, alert_status=None):
if (alert_status is None):
print 'Warning: A column name with the alerts must be specified'
alert_read_criteria = df[alert_status] >= 1
df[alert_status].loc[alert_read_criteria] = 1
alert_status_dict = {0 : 'Not Read',
1 : 'Read'}
df[alert_status] = df[alert_status].map(alert_status_dict)
return df[alert_status]
Ich möchte, dass die Funktion eine Reihe zurückgibt. Auf diese Weise könnte man einem vorhandenen Datenrahmen eine Spalte hinzufügen:
df['alert_status_text'] = alert_read_text(df, alert_status='alert_status')
Derzeit gibt diese Funktion jedoch eine Reihe korrekt zurück, ändert jedoch auch die vorhandene Spalte. Wie schaffen Sie es, dass die übergebene ursprüngliche Spalte nicht geändert wird?
Da Sie festgestellt haben, dass der übergebene Datenrahmen geändert wird, wenn Parameter als Referenz übergeben werden, gilt dies für Python und hat nichts mit Pandas als solchen zu tun.
Wenn Sie den übergebenen df nicht ändern möchten, erstellen Sie eine Kopie:
def alert_read_text(df, alert_status=None):
if (alert_status is None):
print 'Warning: A column name with the alerts must be specified'
copy = df.copy()
alert_read_criteria = copy[alert_status] >= 1
copy[alert_status].loc[alert_read_criteria] = 1
alert_status_dict = {0 : 'Not Read',
1 : 'Read'}
copy[alert_status] = copy[alert_status].map(alert_status_dict)
return copy[alert_status]
Siehe auch verwandte Themen : Pandas-Datenrahmen, nach Wert kopieren
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen