0

当 def 中的一个变量需要调用与模块相关的东西时,我该如何编写函数定义?

可实施的例子:

df 是一个包含一些列的数据库:

Loc Day A  B
1   1   2  4
1   2   4  2
2   3   7  9
3   4   1  9

操作代码:

import pandas as pd
from labellines import labelLine, labelLines
from linearmodels.panel import PanelOLS
import statsmodels.api as sm

df = pd.DataFrame({"Loc":[1,1,2,3],"Day":[1,2,3,4],"A":[2,4,7,1],"B":[4,2,9,9]})

def Panel_Regression():
    data = df
    day = pd.Categorical(data.Day)
    data = data.set_index(["Loc", "Day"])
    data["Day"] = day
    exog_vars = ["B"]
    exog = sm.add_constant(data[exog_vars])

    mod = PanelOLS(data.A, exog, entity_effects=True, time_effects=True, drop_absorbed=True)

    fe_te_res = mod.fit()
    print(fe_te_res)

Panel_Regression()

这是可操作的,但我想在我的“Panel_Regression”函数定义中添加条目。这样我就可以在一个循环中多次调用它。

当我尝试将“data.A”放入“Panel_Regression”时,我的问题就出现了,如下所示:

def Panel_Regression(my_variable):
    data = df
    day = pd.Categorical(data.Day)
    data = data.set_index(["Loc", "Day"])
    data["Day"] = day
    exog_vars = ["B"]
    exog = sm.add_constant(data[exog_vars])

    mod = PanelOLS(data.my_variable, exog, entity_effects=True, time_effects=True, drop_absorbed=True)

    fe_te_res = mod.fit()
    print(fe_te_res)

Panel_Regression("A")

我收到错误:“'DataFrame' 对象没有属性 'my_variable'”

我也试过: Panel_Regression(data.A)

...但这也不起作用,因为“数据”仅在def中定义,因此尝试将其从函数定义中取出也行不通。

我想我错过了一些关于如何从我自己的定义中调用它的基本知识。另外,如果有更好的方法来命名这篇文章,我很乐意改变它。

谢谢!

4

1 回答 1

0

根据评论中的 BigBen,答案是:

将 data.my_variable 替换为 data[my_variable]

那行得通。显然 data[my_variable] 更好:Proper way to access a column of a pandas dataframe

于 2022-02-02T23:28:35.827 回答