Home > database >  How to use a function twice?
How to use a function twice?

Time:10-11

I have to use the same function twice. The first when the parameter is df, the second when the parameter is df3. How to do that? The function:

def add(df, df3):
    df["timestamp"] = pd.to_datetime(df["timestamp"])
    df = df.groupby(pd.Grouper(key = "timestamp", freq = "h")).agg("mean")
    price = df["price"]
    amount = df["amount"]
    return (price * amount) // amount

The double use :

out = []

# This loop will use the add(df) function for every csv and append in a list
for f in csv_files:
    df = pd.read_csv(f, header=0)
    # Replace empty values with numpy, not sure if usefull,  maybe pandas can handle this
    df.replace("", np.nan)  
    #added aggregate DataFrame with new column to list of DataFrames
    out.append(add(df))

out2 = []
df3 = pd.Series(dtype=np.float64)
for f in csv_files:
    df2 = pd.read_csv(f, header=0)
    df3 = pd.concat([df3, df2], ignore_index=True)

out2 = pd.DataFrame(add(df = df3))
out2

I got the error:

TypeError: add() missing 1 required positional argument: 'df3'

CodePudding user response:

The names of the add function have nothing to do with the variable names df and df3 in the rest of the script.

As @garagnoth has stated, you only need one parameter in add. You can call it df, foo or myvariablename: it is not related to nor df, nor df3.

In your case, you can change the add function to the following:

def add(a_dataframe):
    # I set the argument name to "a_dataframe" so you can
    # see its name is not linked to outside variables
    a_dataframe["timestamp"] = pd.to_datetime(a_dataframe["timestamp"])
    a_dataframe = a_dataframe.groupby(pd.Grouper(key = "timestamp", freq = "h")).agg("mean")
    price = a_dataframe["price"]
    amount = a_dataframe["amount"]
    return (price * amount) // amount

You can now call this function with df or df3 as the rest of the script already does.

  • Related