【问题标题】:How to use a function twice?如何两次使用一个函数?
【发布时间】:2021-11-29 08:33:53
【问题描述】:

我必须两次使用相同的功能。参数为df时为第一个,参数为df3时为第二个。怎么做?功能:

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

双重用途:

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

我得到了错误:

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

【问题讨论】:

  • 你调用你的函数add(df),而你定义它需要两个参数。
  • 我编辑了我的帖子,当我在第二个循环中写入 df = df3 时出现错误。我的代码是这样写的: - 函数 - 创建第一个数据帧然后在其上使用函数的循环 - 第二个循环创建第二个数据帧然后在其上使用函数
  • 好吧,你真的不需要def add(df, df3):。只需将函数定义为def add(df):。然后,当您想将其用于 df3 时,只需将 df3 作为参数传递,即add(df3)
  • 好吧,我得到的结果不是我想要的,但功能正常,感谢您的帮助,不便之处敬请见谅

标签: python dataframe function csv parameters


【解决方案1】:

add 函数的名称与脚本其余部分中的变量名称 df 和 df3 无关。

正如@garagnoth 所说,您只需要add 中的一个参数。你可以称它为df、foo或myvariablename:它与df无关,也与df3无关。

在您的情况下,您可以将 add 函数更改为以下内容:

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

您现在可以使用 df 或 df3 调用此函数,就像脚本的其余部分一样。

【讨论】:

  • 现在我很清楚了,我对如何使用参数还不够了解,谢谢
猜你喜欢
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多