Python相当于R< deparse(substitute())

时间:2018-04-04 17:37:08

标签: python pandas

我想在pandas DataFrame上对模型进行评分,然后在同一个DataFrame中创建一个包含该模型预测的列。应该命名新列,以便它引用适当的模型,以便可以使用多个模型多次执行此操作。我可以在R中使用deparsesubstitute这样做:

df <- data.frame(a=1:5+rnorm(1:5), b=6:10+rnorm(1:5), y=11:15+rnorm(1:5))
ols <- lm(df$y ~ df$a + df$b)

func <- function(df, model){
  new_col <- paste0(deparse(substitute(model)), '_predictions')
  df[, new_col] <- predict(model, df)
  return(df)
}

func(df, ols)
         a         b        y ols_predictions
1 1.569142  7.735250 11.90998        12.99388
2 0.828704  4.468299 12.16632        12.01042
3 2.270323  8.135620 14.25781        13.51283
4 1.847564  9.602450 13.76106        13.46148
5 5.776140 10.723743 16.08072        16.19727

Python中的等价物是什么?

1 个答案:

答案 0 :(得分:1)

这可能会有所帮助。

R代码中,您可以放弃deparse并获得相同的结果:

new_col <- paste0(substitute(model), '_predictions')

解析 Python

import pandas as pd
from sklearn import datasets
from sklearn import linear_model

data = datasets.load_boston()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.DataFrame(data.target, columns=["MEDV"])["MEDV"]

lm = linear_model.LinearRegression()
ols = lm.fit(X,y)

def my_func(df, model):
    name = [k for k,v in globals().items() if v is model][1]
    new_col = name + "_predictions"
    df[new_col] = model.predict(X)
    return df

my_func(X, ols)

<强>结果

enter image description here

ATTN :请记住,Python的工作方式与R不同,并且可能会有几个指向内存中同一对象的指针,这可能会导致错误。