为循环内部的数据帧赋值



我想写一个函数,它接受一个数据帧并删除其中的一些行:

import pandas as pd
a = pd.DataFrame([1,2,3,3,5])
def f(df):
df = df[(df > 2)]
print(df)
f(a)
print(a)

此输出

0
2  3
3  3
4  5
0
0  1
1  2
2  3
3  3
4  5

因此此处未更新a。这是因为函数体内的df实际上是a的副本吗?如果是,我如何重写代码以访问函数中的真实数据帧?更普遍地说,我想对函数中的数据帧做其他各种事情,这些事情需要更新作为函数输入传递的对象,那么有没有通用的解决方案呢?

这就是你真正想要问的问题我认为:Pandas使用掩码在原地对数据帧进行子集划分的最佳方法

如何就地过滤。

所以在你的情况下,它会是(我认为(:

import pandas as pd
a = pd.DataFrame([1,2,3,3,5])
def f(df):
# df = df[(df > 2)]
df.drop(df[(df > 2)], inplace = True) # might need df[(df>2)].index
print(df)
f(a)
print(a)

您还可以修改全局变量a:

import pandas as pd
a = pd.DataFrame([1,2,3,3,5])
def f(df_name):
globals()[df_name] = eval(f"{df_name}[({df_name} > 2)]")
print(globals()[df_name])
f("a")

现在,名为";a";将被修改。请注意,函数的参数是字符串";a";而不是变量CCD_ 4本身。这是有效的,但不推荐使用,因为代码中有globalseval(阅读更多原因:为什么全球状态如此邪恶?(

简单的方法是:

def f(df):
return df[(df > 2)]
a = f(a)

函数返回刚刚更改的数据帧。

最新更新