【问题标题】:Having an issue appending to list inside function附加到函数内部列表时出现问题
【发布时间】:2019-07-30 01:00:57
【问题描述】:

我有下表,它具有唯一的 ID、实际和建模输出。

   Pass_ID Actual Modeled 
0    100     1      1
1    101     0      1 
2    102     1      0  
3    103     1      1

我编写了以下函数,这样我就可以生成一个列表,最终我会变成一个数据框,这样我就可以轻松地回调每个 Pass_ID 的行,看看我是否可以找出模型不适用于这些行的原因。但是,列表总是空的。

new_list = []

def isolate_diff(df):
    if df['Modeled'].any() != df['Actual'].any():
        new_list.appened(df['Pass_ID'])
    else:
        pass

    return new_list

我该如何解决这个问题?

【问题讨论】:

  • 您的代码不正确。它应该是 append 而不是第 5 行中的 appened。
  • 你永远不会调用你的 isolate_diff(df) 函数。尝试在脚本底部添加new_list = isolate_diff(df)
  • 最好在isolate_diff中定义new_list,因为函数会返回new_list。

标签: python list function append


【解决方案1】:

您写的是全局条件,而不是矢量化条件:

if df['Modeled'].any() != df['Actual'].any():

如果 any 元素是 1,则每个术语都是 True。这很快评估为

if True != True

这会让你得到一个空的new_list。

相反,写一个表达式抓取df['Pass_ID'],过滤其中df['Modeled'] != df['Actual']。你能从那里拿走吗?

【讨论】:

    【解决方案2】:

    将new_list.appened(df['Pass_ID']) 更改为new_list.append(df['Pass_ID'])

    编辑:Prune 和 U9 检测到其他一些错误。这是我看到的第一个不正确的东西。请按照他们的答案进行更详细的修改

    【讨论】:

      【解决方案3】:

      我同意@Prune,但要解决它,我认为您需要一个完全不同的解决方案:

      print(df[df['Modeled']!=df['Actual']])
      

      输出:

         Pass_ID  Actual  Modeled
      1      101       0        1
      2      102       1        0
      

      如果你想要Pass_ID的列表:

      print(df.loc[df['Modeled']!=df['Actual'],'Pass_ID'].tolist())
      

      输出:

      [101, 102]
      

      【讨论】:

      • 哇。棒极了。非常感谢。我想我已经结束了。非常感谢大家的帮助
      猜你喜欢
      • 2019-04-17
      • 2020-07-26
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      相关资源
      最近更新 更多