Ich möchte einen Datenrahmen in einer benutzerdefinierten Funktion in Python zu manipulieren. Der Manipulationscode funktioniert einwandfrei, wenn ich ihn außerhalb der Funktion ausführe. Wenn ich es jedoch in die Funktion einfüge und die Funktion ausführe, läuft es ohne einen Fehler, gibt aber keinen Datenrahmen zurück. Mein Code sieht folgendermaßen aus:Python: Datenframe in Benutzerfunktion manipulieren
def reshape(file):
from IPython import get_ipython
get_ipython().magic('reset -sf')
#import packages
import pandas as pd
import datetime
import calendar
#define file path and import files
path="X:/TEMP/"
file_path =path+file
df = pd.read_excel(file_path, "Sheet1", parse_dates=["Date"])
#reshape data to panel
melted = pd.melt(df,id_vars="Date", var_name="id", value_name="Market_Cap")
melted["id"] = melted["id"].str.replace("id", "")
melted.id = melted.id.astype(int)
melted.reset_index(inplace=True, drop=True)
id_to_string = pd.read_excel(file_path, "Sheet2")
id_to_string = id_to_string.transpose()
id_to_string.reset_index(level=0, inplace=True)
id_to_string.rename(columns = {0: 'id'}, inplace=True)
id_to_string.rename(columns = {"index": 'Ticker'}, inplace=True)
merged = pd.merge(melted, id_to_string, how="left", on="id")
merged = merged.sort(["Date","Market_Cap"], ascending=[1,0])
merged["Rank"] = merged.groupby(["Date"])["Market_Cap"].rank(ascending=True)
df = pd.read_excel(file_path, "hardcopy_return", parse_dates=["Date"])
df = df.sort("Date", ascending=1)
old = merged
merged = pd.merge(old,df, on=["Date", "id"])
merged = merged.set_index("Date")
return merged
reshape("sample.xlsx")
Dieser Code läuft durch, gibt aber nichts zurück. Habe ich einen Fehler im Def-Befehl oder durch Aufruf der Funktion gemacht? Jede Hilfe wird sehr geschätzt.
Sie sollten den Code hochladen, damit wir sehen können, was Sie mit diesem Datenrahmen tun – nacho
Okay, wenn es hilft. Ich tat. Aber der Code selbst läuft ordnungsgemäß ohne die Funktion wrapper –
Ist die letzte Zeile 'reshape (" sample.xlsx ")' nicht eingerückt, oder ist es nur Stackoverflow Formatierung? Wenn ja, sollten Sie es einrücken, damit es als Teil der Funktion betrachtet wird. Andernfalls ist die Anweisung 'return' ebenfalls nicht enthalten. –