【问题标题】:Using *args to pass dataframe to function使用 *args 将数据帧传递给函数
【发布时间】:2020-07-05 19:23:34
【问题描述】:

我想编写一个函数,其中可以将多个数据帧作为 *args 传递以绘制一些图。是这样的:

def f_plot (*args):
    p = None
    if args == df1:
        ...plot rules for df1...
        p = plot.show()
    elif args == df2:
        ...plot rules for df2...
        p = plot.show()
    else:
        raise ValueError("No *args were passed!!!)
    return p

顺便说一句,我收到以下错误:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty(), a.bool(), a.item(), a.any() or a.all().

这些是简化的 df 示例:

df1 = {'home': [A,B,C,D,E], 'away': [F,G,H,I,J], 'score_in': [2,1,3,2,0], 'score_out': [1,3,1,0,2], ‘competition’: [highschool, university, highschool, university, MLS, university]}

df2=df1.groupby('competition').get_group('university')

对于这个例子,我想创建,如果 arg 等于 df1,在同一个图中关于分数的 n 个子图,其中 n 是比赛,而如果 arg 等于可能的 df2 之一,则单个图与以往不同。

有什么帮助吗?

【问题讨论】:

  • 请发布整个堆栈帧,以便我们知道哪一行有错误。我们不必猜测。
  • ...但无论如何猜测,在if args == df1 中,args 是一个元组。我不知道df1 是什么,大概是一个数据框?首先,它不是一个元组,pandas 在您尝试将数据框设置为真或假时会生气。正如它所说,它模棱两可。也许a.empty(), a.bool(), a.item(), a.any() or a.all()。这是个好建议!
  • 我没有得到 a.empty()、a.bool()、a.item()、a.any() 或 a.all():我有什么方法可以设置如果我的函数中的条件避免 True 或 False?当然,df1 等等都是我在上面写的数据框。
  • 当然,您说 args 是数据帧,并没有提到 df1 和 df2 是什么。在您的代码中,df1 很容易成为数据帧的元组,如“数据帧集合 1”。由于 args 是一个元组,因此将其与另一个元组进行比较并将多个数据帧放在一个图上是合理的。
  • 一个数据框可以有多个值和多种方式来决定真实性。是不是因为它不为空,df 中的至少一个值是真的,df 中的所有值都是真的?这就是你必须指定的原因。

标签: python pandas function dataframe


【解决方案1】:

*args 用作一个元组,因此从您的代码来看,它不一定看起来需要使用它。

除此之外,您可以对 pandas DataFrame 使用 .equals() 函数: https://www.w3resource.com/pandas/dataframe/dataframe-equals.php

我不确定 df1 或 df2 中包含什么

【讨论】:

  • 谢谢你 Uy Tran。 df1 和 df2 是两个数据框,有 6 列,其中两列是数字,我想创建一个带有通用参数的函数,该参数可以等于 df1 或 df2 以制作一种或另一种图。我想用 if 条件和 *args 参数来做到这一点,但我想与 df 的真/假匹配存在问题.. .equals() 可以帮助实现我的目标吗?
  • *args 用于传入一些未定义数量的参数。它允许您在函数的一次调用中传入多个 DataFrame。您似乎一次只绘制一个数据帧,因此您不需要使用*args
  • .equals() 返回两个数据帧是否具有相同的内容。如果您能阐明您希望如何将输入数据帧与 df1 或 df2 进行比较。
  • 其实我什么都不想比较。我只需要让我的函数知道我作为参数传递的数据帧是“类型 1”还是“类型 2”。如果是 1,我有一些绘图规则,否则我有其他规则。
  • 最初,我做了类似 f_plot(df1==None, df2==None): if df1 !=None and df2==None ..rules to plot 1.. elif: df1== None and df2!=None ..files to plot 2. 但它不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 2017-08-31
相关资源
最近更新 更多