为啥我的值在运行我的函数后没有改变? [复制]

Posted

技术标签:

【中文标题】为啥我的值在运行我的函数后没有改变? [复制]【英文标题】:Why do my values not change after running my function? [duplicate]为什么我的值在运行我的函数后没有改变? [复制] 【发布时间】:2021-05-10 17:12:17 【问题描述】:

我正在尝试从列中删除异常值。假设我有:

rand_df = pd.DataFrame("A": [1,2,3], 'B': [4,5,6])

如果我这样做:

rand_df = rand_df[rand_df['A'] > 2]

我得到了一个我想要的新 df。但是,如果我尝试:

def some_fxn(df, col):
    df = df[df[col] > 2]

some_fxn(rand_df, 'A')

我的 df 没有改变。我需要做什么才能使这个功能正常运行?

【问题讨论】:

【参考方案1】:

您期望通过引用行为。 Python 既没有按引用传递,也没有按值传递。它只有bindings to names。

以下代码显示了当对象的 ID 发生变化时

import pandas as pd
rand_df = pd.DataFrame("A": [1,2,3], 'B': [4,5,6])
rand_df = rand_df[rand_df['A'] > 2]
print(rand_df)


def some_fxn(df, col):
    print(id(df))
    df = df[df[col] > 2]
    print(id(df))
    
rand_df = pd.DataFrame("A": [1,2,3], 'B': [4,5,6])
some_fxn(rand_df, 'A')
print(rand_df)

所以你别无选择,只能返回新值。

【讨论】:

【参考方案2】:

您需要在函数末尾使用return。没有显式 return 语句的函数返回 None。

def some_fxn(df, col):
    return df[df[col] > 2]

some_fxn(rand_df, 'A')

Out[412]: 
   A  B
2  3  6

【讨论】:

【参考方案3】:

尽量不要在函数调用中赋值,而是返回并赋值:

def some_fxn(df, col):
    return df[df[col] > 2]

df = some_fxn(rand_df, 'A') # assign to df for updating or any other variable for copy

【讨论】:

以上是关于为啥我的值在运行我的函数后没有改变? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的代码中没有运行 jQuery 文档就绪函数? [复制]

为啥我的状态值即使在改变状态后也没有改变? [复制]

为啥传递给函数的指针的值没有改变? [复制]

vue为啥method值不改

volatile变量的值在多线程中不会改变

为啥我的变量在函数内部修改后没有改变? - 异步代码参考