为什么运行我的函数后我的值没有改变?

时间:2021-02-06 16:02:57

标签: python pandas

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

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 没有改变。我需要做什么才能使该功能正常运行?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您需要在函数末尾使用 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

答案 2 :(得分: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)

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