我正在尝试从列中删除异常值。假设我有:
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 没有改变。我需要做什么才能使该功能正常运行?
答案 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)
所以你别无选择,只能返回新值。